Java permite blocos de inicialização que podem ficar em qualquer lugar no corpo de uma classe. Os blocos podem ser estáticos ou não-estáticos. Os blocos estáticos são inicializados apenas uma vez, quando a classe é carregada pela JVM. Os blocos não-estáticos são executados sempre que é criada uma nova instância de variável. Eles são executados imediatamente após a chamda de
super(). Caso haja mais de um bloco estático ou mais de um bloco não-estático, eles serão executados na ordem em que se encontram na classe, de cima para baixo.
public class Num{
int x;
int y;
static int z;
{x=5;}
public Num(){
//super() implicito
System.out.println(x);
}
static{z=7;}
{y=9;}
}