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?

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

 public class Test { private static final boolean DEBUG = false; public static void main(Ssortingng... args) { if (DEBUG) { System.out.println("Here I am"); } } } 

Après avoir compilé cette classe, javap ensuite une liste des instructions produites via la commande javap :

  Test javap -c
     Compilé à partir de "Test.java"
     classe publique Test extend java.lang.Object {
     Test public ();
       Code:
        0: aload_0
        1: invokespecial # 1;  // Méthode java / lang / Object. "" :() V
        4: retour

     main statique principale vide (java.lang.Ssortingng []);
       Code:
        0: retour

     }

Comme vous pouvez le voir, pas de System.out.println ! 🙂

Oui, le compilateur Java éliminera le code compilé dans les blocs if contrôlés par des constantes. C’est un moyen acceptable de comstackr de manière conditionnelle du code “debug” que vous ne souhaitez pas inclure dans une version de production.