class Tipo {
Tipo(String texto) {
this(Integer.parseInt(texto));
System.out.println("Texto: " + texto);
}
Tipo(int valor) {
this("" + valor);
System.out.println("Valor " + valor);
}
}
public class Teste {
public static void main(String args[]) {
Tipo tipo = new Tipo("15");
}
}
Tá ocorrendo recursividade sem fim em seus construtores, repare que this dentro de cada um dos construtores força a chamada do outro (cada um chamando com o tipo de parametro diferente) construtor e isso vira um loop infinito que é barrado na compilação…é possível fazer um construtor chamar outro, porém tem que ter cuidado com esse problema.
Quando existem construtores sobrecarregados (que é o caso) o this(); é utilizado justamente para chama-los, assim como o super(); é utilizado para chamar os construtores da superclasse. Por isso que o código não compila, tá ocorrendo loop infinito entre os dois construtores que ele criou tá um chamando o outro, pois um o do int tá chamado com String e vice-versa.
Antes de mais nada, se o código do colega está em um único arquivo .java isso causa erro de compilação pois só podemos ter uma classe pública por arquivo!!
Corrigido esse erro, como o Rafael citou, há erro de compilação pela chamada cíclica dos construtores
//não sabia disso, se caísse ma SCJP teria perdido a questão :)
Error(2,9): cyclic `this' constructor calls involving constructor Class3(java.lang.String)
Error(6,9): cyclic `this' constructor calls involving constructor Class3(int)
agora se, ao invés do construtor fosse um método chamando o outro, ou a ele mesmo, ele compila, roda e dá a seguinte exceção
Exception in thread “main” java.lang.StackOverflowError
Quando existem construtores sobrecarregados (que é o caso) o this(); é utilizado justamente para chama-los, assim como o super(); é utilizado para chamar os construtores da superclasse. Por isso que o código não compila, tá ocorrendo loop infinito entre os dois construtores que ele criou tá um chamando o outro, pois um o do int tá chamado com String e vice-versa.[/quote]
É isso mesmo, vai estourar a pilha, certeza. Resolvido.