Bloco static desagarrado

Olá pessoal…Segue um código:

 public class Teste
 {
	static
	{     		
		System.out.println("Começa...");
 	}
 	
 	public Teste()
 	{
 		System.out.println("Objeto construído");
 	}

	public static void main(String args[])
	{
      		//new Teste();
	}
 }

Nunca havia visto um bloc static assim…Queria saber pra que isso é utilizado, em geral…Além disso, queria saber se existe algo semelhante para os outros modificadores…

Este é um bloco de inicialização estática. Será executado quando sua classe for referenciada pela primeira vez.
Você pode identificar isso fazendo um debug do código…

http://www.guj.com.br/posts/list/43315.java#228968

Os únicos blocos “desgarrados” são o “static” (que você viu) e um que nem nome tem, e que é chamado por todos os construtores.

Algo static se refere à inicialização da classe e não do Objeto.

Desta forma, quando a vm inicializar a classe (antes de criar objetos), ele executará o conteúdo static dela. Incluindo este bloco de código, que as vezes é chamado de construtor static.

Já vi situações em que este construtor era utilizado quando uma configuração ou recurso do sistema era indispensável para o sistema. Desta forma, antes dos objetos serem criados era verificada a existência e disponibilidade destes recursos.

[]sssss

[quote=kinow]…
Já vi situações em que este construtor era utilizado quando uma configuração ou recurso do sistema era indispensável para o sistema. Desta forma, antes dos objetos serem criados era verificada a existência e disponibilidade destes recursos.
[]sssss[/quote]

umas delas é para o Log4J

static Logger logger = Logger.getLogger(suaclasse.class);

Que coincidência! Hoje eu precisei desse bloco para inicializar uma static HashMap.

class MinhaClasse{
    private static final Map aaa;
   
    static{
        aaa = new HashMap();
        aaa.put( "Chave1" , "valor1" );
        aaa.put( "Chave2" ,  "valor2" );
        //etc...
    }
}

Focão, de uma olhada no link postado pelo thingol, é completamente diferente do que vc está citando, pois aí vc só esta inicializando uma variável estática com modificador de acesso default, não é um bloco de código estático que é o ítem à que o tópico se refere.

[]'s