código dentro de static

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.

Obrigado.

Muito esclarecedor. :smiley:

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.