Boa noite pessoal,
Sei que a pergunta pareça boba, mas acabei de ver um código que não compreendi direito.
O que queremos dizer quando usando código java dentro de static, como no código abaixo?
static {
try {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
Fico grato.
Abraços
static{ … } significa bloco de inicialização estático.
Blocos de inicialização podem tanto ser da instancia { … } quanto static { … }, a diferença se encontra que o static é acionado só uma vez quando vc faz uma referência a um objeto de uma classe que o contenha e o outro e executado toda vez que você cria um objeto mas lembre-se que ele é executado antes do construtor.
Fazendo um comentário sobre esse codigo:
Não é recomendado esse tipo de código dentro de um bloco de inicialização porque como ele pode lançar uma exceção uma das regras dos blocos é você não lançar exceções checked.
Uma observação
- Uma simples referencia a classe, ativa o bloco static (não é necessário instanciar o objeto)
Se você fizer por exemplo:
Class.forName("foo.bar.Classe");
O bloco static será executado. Essa é a forma que geralmente os drivers JDBC usam para se registrar.