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

Вот wget сценарий в Python:

# From python cookbook, 2nd edition, page 487
import sys, urllib

def reporthook(a, b, c):
    print "% 3.1f%% of %d bytes\r" % (min(100, float(a * b) / c * 100), c),
for url in sys.argv[1:]:
    i = url.rfind("/")
    file = url[i+1:]
    print url, "->", file
    urllib.urlretrieve(url, file, reporthook)
print
45
задан twolfe18 27 August 2009 в 23:26
поделиться

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 :

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

115
ответ дан 26 November 2019 в 20:56
поделиться

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

13
ответ дан 26 November 2019 в 20:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: