Attributi statici

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

  1. la risorsa x esiste prima che siano istanziate s1 e s2
  2. s1 e s2 incrementano la stessa risorsa x
  3. 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

  1. x1 è inizializzata implicitamente a 0 dal compilatore
  2. x2 è inizializzata esplicitamente a 5 nella dichiarazione
  3. x3 è inizializzata a 10 dal blocco static
  4. le diverse inizializzazioni di x1, x2 e x3 sono svolte automaticamente, e una sola volta, prima del loro utilizzo