Dúvida ExceptionInInitializerError [RESOLVIDO]

8 respostas
evertonsilvagomesjav

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. }

8 Respostas

M

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

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

rodrigo.bossini

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

S

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. }

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

rodrigo.bossini

Marcos Lima:
Vc tem que inicializar o Array com uma capacidade, certo?

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

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

evertonsilvagomesjav

rsrs rod daria nullpointer num caso desse n?

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

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

rodrigo.bossini
evertonsilvagomesjava:
rsrs rod daria nullpointer num caso desse n?
int [] a;
	
	void teste(){
		
		a[0] = 2;
		
}

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

S

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. }

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???

Criado 12 de fevereiro de 2010
Ultima resposta 15 de fev. de 2010
Respostas 8
Participantes 4