Una classe può contenere delle costanti di utilità generale come
java.lang.Math
public static final double E |
=2.718281828459045d |
public static final double PI |
=3.141592653589793d) |
java.lang.Double
public static final double MIN_VALUE public static final double MAX_VALUE public static final double NEGATIVE_INFINITY public static final double POSITIVE_INFINITY public static final double NaN |
Un uso particolare degli attributi statici è come attributi di classe.
Si comportano come variabili globali per tutte le istanze della classe
public class ProvaStatica { public static void main(String args[]) { System.out.println(Statica.x); Statica s1 = new Statica(); System.out.println(Statica.x); Statica s2 = new Statica(); System.out.println(Statica.x); System.out.println(s1.x); System.out.println(s2.x); } } class Statica { private static int x=10; Statica() { x++; } }
Note
- la risorsa x esiste prima che siano istanziate s1 e s2
- s1 e s2 incrementano la stessa risorsa x
- x può essere referenziata come s1.x, s2.x, Statica.x
Inizializzazione
L’inizializzazione dell’attributo di classe può essere svolta
- implicitamente
- esplicitamente
- in un blocco static
class Statica { private static int x1; private static int x2=5; private static int x3; static { x3=10; } // eccetera }
Note
- x1 è inizializzata implicitamente a 0 dal compilatore
- x2 è inizializzata esplicitamente a 5 nella dichiarazione
- x3 è inizializzata a 10 dal blocco static
- le diverse inizializzazioni di x1, x2 e x3 sono svolte automaticamente, e una sola volta, prima del loro utilizzo