Препроцессор Java

Если у меня есть логическое поле, как:

private static final boolean DEBUG = false;

и в моем коде у меня есть такие заявления:

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

препроцессор Java просто избавляется от оператора if и недоступного кода? "

 Perry22 дек. 2016 г., 01:50
Ссылка выше не работает ... это 'снегdocs.oracle.com/javase/tutorial/java/annotations
 twolfe1828 авг. 2009 г., 21:12
Спасибо за статью, я неЯ не знаю, что Java ненет препроцессора. Так что я просто говорю о компиляторе.
 S.Lott28 авг. 2009 г., 01:55
В языке Java нет препроцессора, "(java.sun.com/developer/JDCTechTips/2003/tt0408.html) Вы говорите о компиляторе Java?
 KomodoDave09 февр. 2013 г., 13:24
Это'правда, что Java неу него есть препроцессор с теми же возможностями, что и в C / C ++. Однако он имеет процессоры аннотаций, которые предлагают обработку во время компиляции. УвидетьOracle»Учебник по аннотациям

Ответы на вопрос(2)

if блоки, которые контролируются константами. Это приемлемый способ условно компилироватьотлаживать» код, который вы нене хочу включать в производственную сборку.

 user14604313 авг. 2012 г., 16:05
Страница сейчас здесь для jse7:docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.21  а вот для jse5:docs.oracle.com/javase/specs/jls/se5.0/html/...
 Greg Hewgill03 авг. 2010 г., 14:18
@Ralph: см.14.21 Недоступные заявления для обсуждения в JLS. Немного оif Заявление в самом конце этого раздела.
 Ralph03 авг. 2010 г., 13:53
Можете ли вы дать страницу спецификации языка Java, которая утверждает это?
Решение Вопроса

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! :)

 butterchicken28 авг. 2009 г., 01:41
+1 модельный ответ
 twolfe1828 авг. 2009 г., 01:41
Кроме того, я проверил, когда у вас есть заявление, что-то вродеif(DEBUG && condition_that_may_be_true) ..., и еслиDEBUG всегда ложно, это исключает.
 akf28 авг. 2009 г., 01:35
+1 за инструкцию о том, как проверить это самостоятельно.

Ваш ответ на вопрос