Bloco static {} dentro de uma classe

3 respostas
G

Pessoal não sei se essa pergunta seria java básico ou avançado… mas enfim, para que serviria um bloco static que não tem referencia , nome, etc… como :

private static NumberFormat decimalFormat = null;

static {

Locale locale = new Locale(pt, BR);

decimalFormat = DecimalFormat.getInstance(locale);

decimalFormat.setMaximumFractionDigits(Currency.getInstance(locale).getDefaultFractionDigits());

decimalFormat.setMinimumFractionDigits(Currency.getInstance(locale).getDefaultFractionDigits());

}

valeu!!!

3 Respostas

T
private static NumberFormat decimalFormat = null;

static {
Locale locale = new Locale("pt", "BR");
decimalFormat = DecimalFormat.getInstance(locale);
decimalFormat.setMaximumFractionDigits(Currency.getInstance(locale).getDefaultFractionDigits());
decimalFormat.setMinimumFractionDigits(Currency.getInstance(locale).getDefaultFractionDigits());
}

Isso existe (o static sem nome) porque há certas coisas que você gostaria de inicializar estaticamente, mas não dá para fazer fora de um bloco (por exemplo, porque é difícil fazer pela linguagem, ou porque pode lançar uma exceção). Uma forma é criar um método privado e estático que faça a mesma coisa, mas quando as coisas são simples, você pode ajuntar tudo em um static sem nome.

Isso seria mais ou menos equivalente a:

private static DecimalFormat getCurrencyFormat() {
    Locale locale = new Locale("pt", "BR");
    decimalFormat = DecimalFormat.getInstance(locale);
    decimalFormat.setMaximumFractionDigits(Currency.getInstance(locale).getDefaultFractionDigits());
    decimalFormat.setMinimumFractionDigits(Currency.getInstance(locale).getDefaultFractionDigits());
    return decimalFormat;
}
private static NumberFormat decimalFormat = getCurrencyFormat();
rafaelglauber

Oi,

Blocos static são executadados quando sua classe é carregada (carregada é diferente de instanciada para criação de novos objetos desta classe). Este bloco é executado uma única vez enquanto sua VM estiver “ativa”. Essa é a diferença básica para um bloco de inicialização comum que sempre é executado quando uma novo objeto é criado. Outra diferença é que o bloco static é executado primeiro que outros blocos de inicialização.

G

Entendi, valeu pessoal!!!

Criado 13 de outubro de 2008
Ultima resposta 13 de out. de 2008
Respostas 3
Participantes 3