45 votes

Préprocesseur Java

Si j'ai un champ booléen comme :

private static final boolean DEBUG = false;

et dans mon code j'ai des déclarations comme :

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

Le préprocesseur Java se débarrasse-t-il simplement de l'instruction if et du code inaccessible ?

115voto

Adam Paynter Points 22056

La plupart des compilateurs élimineront cette déclaration. Par exemple :

public class Test {

    private static final boolean DEBUG = false;

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

}

Après avoir compilé cette classe, j'imprime ensuite une liste des instructions produites via la fonction javap commandement :

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

    }

Comme vous pouvez le voir, aucun System.out.println ! :)

13voto

Greg Hewgill Points 356191

Oui, le compilateur Java éliminera le code compilé à l'intérieur de if des blocs qui sont contrôlés par des constantes. Il s'agit d'un moyen acceptable de compiler de manière conditionnelle du code de "débogage" que vous ne souhaitez pas inclure dans une version de production.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X