Istruzione static
Consente di dichiarare un nuovo inizializzatore di classe all'interno di una dichiarazione di classe.
static identifier {
[body]
}
Argomenti
identificatore
Obbligatorio. Nome della classe contenente il blocco dell'inizializzatore.body
Facoltativo. Codice che comprende il blocco dell'inizializzatore.
Note
Un inizializzatore static viene utilizzato per inizializzare un oggetto di una classe (non le istanze di un oggetto) prima che questo venga impiegato. L'inizializzazione viene eseguita una sola volta e può essere utilizzata per inizializzare campi nella classe contrassegnata con il modificatore static.
Una classe può contenere più blocchi di inizializzatore static frammisti a dichiarazioni di campo static. Per inizializzare la classe è necessario che tutti gli inizializzatori di blocchi e di campi static vengano eseguiti nell'ordine in cui sono stati specificati nel corpo della classe. L'inizializzazione viene eseguita prima che venga rilevato il primo riferimento a un campo static.
Il modificatore static non deve essere confuso con l'istruzione static. Il modificatore static indica che un membro di una classe appartiene alla classe stessa e non a un'istanza della classe.
Esempio
Nell'esempio seguente viene illustrata la dichiarazione di una classe semplice in cui l'inizializzatore static viene utilizzato per eseguire un calcolo che non dovrà essere ripetuto. In questo esempio viene calcolata una sola volta una tabella di fattoriali. Quando sono richiesti, i fattoriali vengono letti da tale tabella. Si tratta di un metodo più veloce rispetto al calcolo ricorsivo dei fattoriali, in particolare in circostanze in cui in un programma è frequente la richiesta di fattoriali elevati.
Per il metodo relativo ai fattoriali viene utilizzato il modificatore static.
class CMath {
// Dimension an array to store factorial values.
// The static modifier is used in the next two lines.
static const maxFactorial : int = 5;
static const factorialArray : int[] = new int[maxFactorial];
static CMath {
// Initialize the array of factorial values.
// Use factorialArray[x] = (x+1)!
factorialArray[0] = 1;
for(var i : int = 1; i< maxFactorial; i++) {
factorialArray[i] = factorialArray[i-1] * (i+1);
}
// Show when the initializer is run.
print("Initialized factorialArray.");
}
static function factorial(x : int) : int {
// Should have code to check that x is in range.
return factorialArray[x-1];
}
};
print("Table of factorials:");
for(var x : int = 1; x <= CMath.maxFactorial; x++) {
print( x + "! = " + CMath.factorial(x) );
}
L'output del codice è il seguente:
Table of factorials:
Initialized factorialArray.
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120