StackOverflowError não sei porque

4 respostas
evertonsilvagomesjav

Alguem sabe me dizer o porque esta dando StackOverflowError, nao estou estourando nada na pilha "eu acho".

package inner;

public class Teste {

	public static void main(String[] args) {

		A a = new A();
		
		a.a.go(); // aqui da o Stack...
		
		
	}
	
	
}
package inner;

public class A {

	public void go(){
		
		System.out.println("Class A Pai");
		
	}
	
	
	class TesteA{
		
		public void go(){
			
			System.out.println("Inner Class TesteA");
			
		}
		
	}
		
	static class TesteBStatic{
		
		
		public TesteBStatic() {
			System.out.println("Construtor TesteB");
		}
		
		public void go(){
			
			System.out.println("static class TesteB");
			
		}
			
	}
	
	
	A a = new A(){
		
		public void go(){
			
			System.out.println("Anoninmous class a...");
			
		}
		
	};
	
}

4 Respostas

rmendes08

O problema é que você tem uma chamada recursiva do construtor default da classe A quando você cria a classe anônima. Você definiu em A uma variável do tipo A. Isso é perfeitamente possível. Porém quando você inicializa essa variável com uma subclasse anônima de A você cria a recursão, porque o novo objeto também tem um campo A inicializado com uma subclasse, e por aí vai.

G

Olá!

acho que assim fica mais fácil visualizar:

package stackTest;

public class Teste {
	public static void main(String[] args) {
		A a = new A();
	}
}
class A {
	A a;
	A() {
		a = new A();
	}
}

Abs.

rmendes08
gervas-IO:
Olá!

acho que assim fica mais fácil visualizar:

package stackTest;

public class Teste {
	public static void main(String[] args) {
		A a = new A();
	}
}
class A {
	A a;
	A() {
		a = new A();
	}
}

Abs.

Quando a chamada é explícita ela nem compila.

evertonsilvagomesjav

Hum cara é verdade!! Toda vez que eu criar uma classe anônima então e de dentro dessa popria classe eu der um new ClasseQueTemUmaClasseAnonima() vai gerar recursão num vai n?

Criado 28 de julho de 2010
Ultima resposta 29 de jul. de 2010
Respostas 4
Participantes 3