vamos aos misterios do java então…
pelo pelos testes realizados, pude concluir que o java processa
os atributos estaticos de acorco com a procedência dele no fonte…
bom primeiro caso que tu colocou ae:
static {
t = 4;
}
static int t = 0;
o interpretador do codigo compila por ele acha o atributo declado após,
mas está apenas realizando uma operação de atribuição 2 vezes…, ou
seja a declaração do atributo estático pode ser feito após a sua valoração…
caso tu fizer:
static {
t = 2;
}
static int t;
se mandar imprimir o resultado ele imprimirá = 2…
que será o mesmo efeito de seu código estar assim:
static int t;
static {
t = 2;
}
ou ainda:
static int t = 10;
static {
t = 2;
}
agora vamos ao caso que gerou o erro…:
static {
t++;
}
static Integer t = 0;
nesse caso você está tentando realizar uma operação antes de inicializar o seu atributo estático, com isso gera erro pois você não possui valor algum no atributo para poder realizar alguma operação, porém se você alterar o seu fonte para:
static int t = 0;
static {
t++;
}
irá funcionar…
com isso nesse caso, vendo o funcionamento após testes, tem como concluir que os atributos estáticos possue uma certa regra de organização de código…
lembrando o pensamento: você primeiro tem que atribuir algum valor ao atributo para depois realizar uma operação com o mesmo, que é o caso desse ultimo código, no código anterior, que gera erro, isso não ocorre, pois primeiro você está tentando incrementar o atributo, sendo que este possuem valor nenhum, por isso gera o erro…

ficou com dúvidas ainda, nada como testar os códigos citados e ver o que acontece 