2009-08-27 18 views
41

अगर मैं एक बूलियन क्षेत्र की तरह है:जावा प्रीप्रोसेसर

private static final boolean DEBUG = false;

और मेरे कोड के भीतर मैं की तरह बयान है:

if(DEBUG) System.err.println("err1");

जावा पूर्वप्रक्रमक सिर्फ अगर से छुटकारा पाने करता है बयान और पहुंचने योग्य कोड?

+2

"जावा भाषा में कोई प्रीप्रोसेसर नहीं है," (http://java.sun.com/developer/JDCTechTips/2003/tt0408.html) क्या आप जावा कंपाइलर के बारे में बात कर रहे हैं? –

+0

लेख के लिए धन्यवाद, मुझे नहीं पता था कि जावा में प्रीप्रोसेसर नहीं है। तो मैं बस संकलक के बारे में बात कर रहा हूँ। – twolfe18

+0

यह सच है कि जावा के पास समान क्षमताओं वाले प्रीप्रोसेसर नहीं हैं जैसे कि सी/सी ++। हालांकि इसमें एनोटेशन प्रोसेसर हैं जो संकलन-समय प्रसंस्करण की पेशकश करते हैं। [ओरेकल के एनोटेशन ट्यूटोरियल] देखें (http://docs.oracle.com/javase/tutorial/java/javaOO/annotations.html) – KomodoDave

उत्तर

109

अधिकांश कंपाइलर कथन को खत्म कर देंगे। उदाहरण के लिए:

public class Test { 

    private static final boolean DEBUG = false; 

    public static void main(String... args) { 
     if (DEBUG) { 
      System.out.println("Here I am"); 
     } 
    } 

} 

इस वर्ग के संकलन के बाद, मैं तो उत्पादन निर्देश की एक सूची javap आदेश के माध्यम से प्रिंट:

javap -c Test 
    Compiled from "Test.java" 
    public class Test extends java.lang.Object{ 
    public Test(); 
     Code: 
     0: aload_0 
     1: invokespecial #1; //Method java/lang/Object."":()V 
     4: return 

    public static void main(java.lang.String[]); 
     Code: 
     0: return 

    } 

आप देख सकते हैं, कोई System.out.println! :)

+16

+1 इस पर निर्देश के लिए कि यह स्वयं परीक्षण कैसे करें। – akf

+2

भी, मैंने जांच की जब आपके पास कोई कथन है जो 'if (DEBUG && condition_that_may_be_true) ... 'है, और यदि' DEBUG' हमेशा झूठा होता है तो यह इसे काट देता है। – twolfe18

+1

+1 मॉडल उत्तर – butterchicken

12

हां, जावा कंपाइलर if ब्लॉक के भीतर संकलित कोड को समाप्त कर देगा जो स्थिरांक द्वारा नियंत्रित होते हैं। सशर्त रूप से "डीबग" कोड संकलित करने का यह एक स्वीकार्य तरीका है जिसे आप उत्पादन निर्माण में शामिल नहीं करना चाहते हैं।

+0

क्या आप जावा भाषा विशिष्टता पृष्ठ दे सकते हैं जो यह बताता है? – Ralph

+3

@ राल्फ: जेएलएस में चर्चा के लिए [14.21 पहुंचने योग्य वक्तव्य] देखें (http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.21)। 'If' कथन के बारे में थोड़ा सा उस खंड के अंत में है। –

+1

पेज जेएस 7 के लिए यहां: http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.21 और यहां jse5 के लिए: http://docs.oracle.com /javase/specs/jls/se5.0/html/statements.html#14.21 –

संबंधित मुद्दे