В Java Препроцессора
Если у меня есть логическое поле типа:
private static final boolean DEBUG = false;
и в моем коде у меня есть заявления типа:
if(DEBUG) System.err.println("err1");
препроцессор Java просто избавляется от оператора if и недостижимого кода?
2 ответов
большинство компиляторов исключат оператор. Например:
public class Test {
private static final boolean DEBUG = false;
public static void main(String... args) {
if (DEBUG) {
System.out.println("Here I am");
}
}
}
после компиляции этого класса я затем печатаю список произведенных инструкций через :
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
! :)
да, компилятор Java устранит скомпилированный код в if
блоки, которые управляются константами. Это приемлемый способ условной компиляции кода "отладки", который вы не хотите включать в производственную сборку.