Instrução Static
Declara um inicializador de classe nova dentro de uma declaração de classe.
static identifier {
[body]
}
Argumentos
identificador
Obrigatório. O nome da classe que contém o bloco de inicializador.body
Opcional. O código que compõe o bloco de inicializador.
Comentários
A estático inicializador é usado para inicializar um classe o objeto (não a instâncias de objeto) antes de sua primeira utilização. Essa inicialização ocorre somente uma vez e pode ser usado para inicializar os campos na classe que tem o estático modificador.
A classe pode conter vários estático blocos de inicializador intercaladas com estático declarações de campo. Ao inicializar o classe, todos os o estático blocos e estático inicializadores de campo são executados na ordem em que aparecem na classe corpo. Essa inicialização é executada antes da primeira referência a um estático campo.
Não confunda o estático modificador com o estático instrução. O estático modificador denota um membro que pertence à própria classe, não qualquer instância da classe.
Exemplo
O exemplo a seguir mostra um simples classe declaração na qual o estático inicializador é usado para executar um cálculo que só precisa ser feito uma vez. Neste exemplo, uma tabela de fatoriais é calculada de uma vez. Quando fatoriais são necessários, eles são lidos da tabela. Essa abordagem é mais rápida do que o cálculo recursivamente de fatoriais se fatoriais grandes são necessárias muitas vezes no programa.
O estático modificador é usado para o método fatorial.
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) );
}
A saída desse código é:
Table of factorials:
Initialized factorialArray.
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120