Dúvida ExceptionInInitializerError [RESOLVIDO]

pq gera esse erro, no seguinte codigo, qual a causa?

10. public class Foo { 11. static int[] a; 12. static { a[0]=2; } 13. public static void main( String[] args ) {} 14. }

Vc tem que inicializar(instanciar) o Array com uma capacidade, certo?

Sem isso, não pode atribuir valores aos seus índices. :smiley:

Tá aí. Se a fosse uma variável de instância seria fácil né. Vou acompanhar esse tópico pra descobrir a resposta.

[quote=evertonsilvagomesjava]pq gera esse erro, no seguinte codigo, qual a causa?

10. public class Foo { 11. static int[] a; 12. static { a[0]=2; } 13. public static void main( String[] args ) {} 14. }[/quote]

Ilustre neste codigo, não tens objecto a, apenas na linha 11 tens uma variavel que vai ter uma referencia a um vector ( objecto) , e não criaste um objecto
e na linha 12 tentaste atribuir um valor

[quote=Marcos Lima]Vc tem que inicializar o Array com uma capacidade, certo?

Sem isso, não pode atribuir valores aos seus índices. :D[/quote]

Verdade. É isso mesmo. Pela exceção eu achei que fosse pelo fato de um bloco estático não poder acessar campos. Mas isso só é verdade se o campo for uma variável de instância.

evertonsilvagomesjava, você poderia ter colado isso aqui : " Caused by: java.lang.NullPointerException". Seria mais fácil deduzir. hehehe

rsrs rod daria nullpointer num caso desse n?

[code]int [] a;

void teste(){
	
	a[0] = 2;

}[/code]

Everton, mas é exatamente isso que você está tentando fazer, mas dentro do bloco estático. :slight_smile:

[quote=evertonsilvagomesjava]rsrs rod daria nullpointer num caso desse n?

[code]int [] a;

void teste(){
	
	a[0] = 2;

}[/code][/quote]

Claro. Trata-se do mesmo erro. Ainda não existe objeto no heap. A variável a faz referência a null.

[quote=evertonsilvagomesjava]pq gera esse erro, no seguinte codigo, qual a causa?

10. public class Foo { 11. static int[] a; 12. static { a[0]=2; } 13. public static void main( String[] args ) {} 14. }[/quote]

Vou tentar explicar por outras palavras, começando do principio é o seguinte,
a Variavel static int[] a é uma variavel de referençia a um objecto do tipo vector de inteiros, mas é apenas uma referençia e não podemos dar valor a referençia apenas podemos dar valor no objecto ao qual a variavel referençia referençiá, e neste caso a variavel “a” ainda não tem referençia para nenhum objecto, apenas existe uma variavel que um dia tera uma referençia mas como ainda não tem referençia não é possivel atribuir valor ao objecto que ela referençia.

E continuando depois de criarmos um objecto do tipo vector ai sim vamos definir o indice do vector, e a variavel estara a referençiar um objecto no qual será possivel inserirmos valores.

por isso quando fazes a seguinte linha de codigo da erro "static { a[0]=2; } " porque neste caso o compilador tenta procurar o objecto no qual a variavel a referençia e se encontrar um objecto em que a variavel a referençia ela procura o indice 0 e atribui o valor, mas neste caso não tem objecto nenhum porque não inicializaste a variavel de referençia. e dai vem o erro.

fazendo isso static int[] a= new int[5]; ai sim estamos a criar um objecto , e a passar a referençia deste objecto a variavel a

será que pude ajudar???