a cura di Dario Dariol
 
     

    Esercizio 004 - Uso delle costanti in Java

    È ormai abbastanza noto che le costanti in Java sono rese con campi static final. Ad esempio la seguente classe dichiara due costanti A e B inizializzate rispettivamente ai valori 1 e 2.
    // Costanti.java
    class Costanti {
      static final int A = 1;
      static final int B;
      static {
         B = 2;
      }
    }

    La seguente classe Main usa le due costanti precedentemente dichiarate.

    // Main.java
    public class Main {
      static public void main(String[]args) {
        System.out.println("A="+Costanti.A+" B="+Costanti.B);
      }
    }

    Compilando ed eseguendo le due classi abbiamo infatti la stampa di 1 e 2:
       prompt> javac Costanti.java Main.java
       prompt> java Main
       A=1 B=2
       prompt>

    Se però cambiamo il valore delle due costanti:

    // Costanti.java
    class Costanti {
      static final int A = 3;
      static final int B;
      static {
         B = 4;
      }
    }

    e ricompiliamo la classe modificata e rieseguiamo il Main cosa verrà stampato?

       prompt> javac Costanti.java
       prompt> java Main
       A=? B=?
       prompt>
     

  • Qual'è il modo corretto di inizializzare il valore delle nostre costanti?
  • In quali casi si inizializza la costante nella stessa dichiarazione?
  • Quando invece è bene inizializzare la costante in un blocco statico?
  • Se per esempio una costante è utilizzata per controllare il livello di trace della nostra applicazione, è corretto inizializzarla con quale dei due modi?

  •  

     

    // Costanti.java
    class Costanti {
      static final int debugLevelA = 3;
      static final int debugLevelB;
      static {
         debugLevelB = 3;
      }
    }

    Siamo sicuri che i seguenti frammenti di codice facciano quello che ci aspettiamo?

    // Main.java
    // ...omissis...
       if (Costanti.debugLevelA > 1)
          System.out.println("Warning A");
    // ...omissis...
       if (Costanti.debugLevelB > 1)
          System.out.println("Warning B");
    // ...omissis...




MokaByte®  è un marchio registrato da MokaByte s.r.l.

Java® è un marchio registrato da Sun Microsystems; tutti i diritti riservati

E' vietata la riproduzione anche parziale
Per comunicazioni inviare una mail a
mokainfo@mokabyte.it