Duvida sobre questao caleum mock

11 respostas
Diabo_Loiro
1. class Tipo {  
   2.    Tipo(String texto) {  
   3.       this(Integer.parseInt(texto));  
   4.       System.out.println("Texto: " + texto);  
   5.    }  
   6.    Tipo(int valor) {  
   7.       this("" + valor);  
   8.       System.out.println("Valor " + valor);  
   9.    }  
  10. }  
  11. public class Teste {  
  12.   public static void main(String args[]) {  
  13.     Tipo tipo = new Tipo("15");  
  14.   }  
  15. }

[color=green]O código compila e roda indefinitivamente, sem imprimir nada.[/color]
O código compila e roda, imprimindo "Texto: 15" uma única vez e termina.
O código compila e roda indefinitivamente, revezando a impressão entre "Texto: 15" e "Valor: 15".
[color=red]O código não compila pois detecta o loop.[/color]

Explicação sobre a resposta
Nem sempre o compilador detecta problemas de loops entre construtores. Portanto, deve-se considerar que o código compila e roda indefinidamente, até ocorrer um erro do tipo StackOverflowError.

Eu fui tentar compilar rodar pra ver se ficava em loop e dava a StackOverflowError. e nao consegui compilar recebi um
Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	Recursive constructor invocation Tipo(int)
	Recursive constructor invocation Tipo(String)

	at Tipo.<init>(Xyh.java:3)
	at Xyh.main(Xyh.java:13)

sera que a pergunta esta desatualizada? por que parece que o compilador percebeu o loop e nao deixou compilar entao a resposta certa deria a quarta e nao a primeira

11 Respostas

Cris_Finholdt

É concordo com vc… acho q este exercicio está desatualizado.

Rodei aqui e deu erro de compilacao, igual o seu.

Diabo_Loiro

eh espera se os moderadores virem e responderem o topico

Lavieri

a sua resposta esta aqui, “Nem sempre” ou seja… as vezes ele detecta, depende do compilador, o que leva ao fato de a resposta correta ser a que da StackOverFlow…

Diabo_Loiro

entao mais o compilador nao eh o JAVAC e unico que tem e no exemplo dado ele encontra erro nao acha que esta desatualizado?

Lavieri

O livro da Kathy Sierra, coloca o mesmo fato, que depende do compilador, os compiladores q uso aki são os do NetBeans e do Eclipse, na verdade a tempos que não uso o do Eclipse, no do netbeans ele acusou o problema.... mais não sei c em um compilador distinto ele vai acusar o erro...

isso vai depender do nivel de inteligencia do compilador....

por exemplo, no mesmo livro da Kathy, ele fala que depende do compilador pra compilar ou não esse código

class Tree {}
public class Redwood extends Tree{
   public static void main(String ... args) {
       Redwood r = (Redwood) new Tree(); //tem compilador que pega, e tem compilador que não.....
       Tree r2 = new Redwood();

       Redwood r3 = (Redwood)r2; //aqui da pra ver facil tb, que o cast vai ser normal
       //mesmo sendo de uma referencia Tree (r2) para um Redwood
   }
}

o meu compilador compilou esse exemplo... mais é bater o olho e ver, que vai dar ClassCastException, pq é impossivel castar o Tree da linha 4 em um Redwood, da forma que ali esta escrito

Diabo_Loiro

cara nao li o livro da kathy ainda e penso que tanto o eclipse ou o net beans sao apenas interfaces graficas para facilitar o usuario que executao o mesmo javac do jdk.....como jcreator etc.. e nao compiladores diferentes no seu exemplo voce ta falando de cast eu falei de loop de construtores.......que gera uma Exeçao Recursive constructor invocation ou seja um a chamando o outro eternamente ai vai outro exemplo

class A{
A(){
this("txt");
}

 A(String txt){
this();
}
public static void maind (String args[]){
A item=new A();
}
}

que resulta em

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	Recursive constructor invocation A(String)
	Recursive constructor invocation A()

	at A.<init>(A.java:3)
	at A.main(A.java:10)

tanto netbeans quando eclipse quando jcreator se alguem souber de mais algum mais diferente para gente testa fala ai

Lavieri

o que quis te falar é outro trecho, onde o livro fala, novamente, alguns compiladores irão detectar o problema e outro não, portanto vc deve conciderar que o programa será compilado, assim é o mesmo caso do this() … existe compiladores segundo o livro, e segundo o caelum que compilam normalmente o código, e sendo assim, vc deve conciderar que há compilação, e assim verificar que haverá exceção…

O seu compilador do WindowsXP, é diferente de um outro do Vista, ou de outro de um LInux, ou de outro de um Mac, etc etc etc… pois cada um é escrito para uma plataforma, não sei exatamente qual é o compilador que não detecta esse problema… talvez seja por exemplo, a versão 6.0.7 eu uso a 6.0.13 …

enfim, pode ser qualquer coisa, não sei te falar, o que sei é q o livro da versão 6.0 da Kathy informa que vc deve conciderar que há compiladores que não visualizam o problema e portanto concidere que o programa compila

eu aqui so tenho essa versão do JDK, portanto não tenho como saber, nas versões do JDK 6.0.0 a 6.0.12 se há compilação nesse código

Lavieri

pra que fique bem claro q isso não é um ainformação minha, aqui vai o trecho do livro, na versão em inglês, do SCJP 6.0 onde fala-se sobre a possibilidade de alguns compiladores não verificarem esse problema…



pronto ta ai em vermelho, o trecho onde esta dito que depende do compilador, e que o resultado então é uma Exceção de StackOverFlowError ao rodar o programa ^^

Edit.: Na versão em portugues deste mesmo livro, esta informação se encontra na página 84

Diabo_Loiro

style velho vlw a informaçao vo estudar ele depois que eu acabar de estudar o just java o use cabela e o deitel porem so tenho em ingles e nao curto muito… nao que n entenda mais eh mais massante estudar em ingles… um pdf em portugues… seria bom ou comprar o livro msm mais eh osso compra um livro pra faze uma prova e n usa mais ossão flw t+

Lavieri

eu pensei de outra forma… pra mim a certificação custa 116 reais mais caro, que é o preço que paguei pelo livro, porem terei uma segurança um pouco maior de que estudei todo assunto… e que vi detalhes importantes…

o livro penso como um investimento para tirar a certificação, so espero que valha a pena ^^ … tirando os execicios, que não da pra confiar na versão em portugues, o resto é bastante valido… eu estudo sempre ao lado do PC, fico lendo em portugues, o livro, e quando vem os trechos de código, eu leio a versão em PDF, pq em ingles o código ta sempre melhor escrito que a versão em portugues, o mesmo faço com os testes individuais, so faço ele em ingles…

flw, e boa sorte…

Ps.: insclusive se alguem souber como ler PDF no celular NOKIA 9500 eu agradeço, pedi pra minha namorada trazer (ta emprestado com ela) … pra num ter q ler ao lado do PC… a tela do nokia 9500 é bem grande, e se ele ler o PDF vai ser perfeito…

Diabo_Loiro

e so desenvolver um j2me rs

Criado 16 de abril de 2009
Ultima resposta 17 de abr. de 2009
Respostas 11
Participantes 3