Duvida de sintase...Não compila...Ajuda????  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
paribe
Forum Spammer
[Avatar]

Membro desde: 22/08/2004 07:34:33
Mensagens: 1356
Offline

Folks,


porque o codigo abaixo não compila...


rafaelglauber
Forum Spammer
[Avatar]

Membro desde: 07/09/2007 23:05:20
Mensagens: 1033
Localização: Feira de Santana
Offline

Oi,

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.

Projeto Free Media
xxta
JavaBaby

Membro desde: 07/04/2008 13:09:17
Mensagens: 87
Localização: Florianópolis, Campos Novos - SC
Offline



Vc teria q criar umas variaveis pra guardar esses valores...

ai teria q ficar +- assim:




Obs.: o "this" é usado para apontar algo da propria classe, geralmente utilizado qdo parametros de metodos tem o mesmo nome de um atributo da classe.

This message was edited 1 time. Last update was at 27/08/2008 09:14:10


[WWW] [MSN]
rafaelglauber
Forum Spammer
[Avatar]

Membro desde: 07/09/2007 23:05:20
Mensagens: 1033
Localização: Feira de Santana
Offline

Obs.: o "this" é usado para apontar algo da propria classe, geralmente utilizado qdo parametros de metodos tem o mesmo nome de um atributo da classe.


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.

Projeto Free Media
Rojas
Thread.start()

Membro desde: 30/06/2005 11:55:13
Mensagens: 41
Offline

Se não me engano, na versão 1.4 da JVM, isto causava estouro da pilha.
thiago.correa
Forum Spammer
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1203
Localização: Depende da hora!
Offline

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



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


"Don't drink and drive, you can crash your car and drop your drink!"
---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago

Vendo livro SCJP 5.0 da Kathy Sierra
Detalhe esse livro é campeão, já me fez passar na prova
g4j
Virtual Machine Man
[Avatar]

Membro desde: 02/05/2007 14:32:03
Mensagens: 504
Localização: Curitiba
Offline

Mas só existe uma classe pública no código dele, não?

Gerson

SCJP 5.0
SCWCD 5.0
Próxima: SCBCD 5.0

[MSN]
thiago.correa
Forum Spammer
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1203
Localização: Depende da hora!
Offline

My bad, troquei o nome da classe default para o arquivo que eu tinha aqui, ao invés da que tinha o acesso public.

"Don't drink and drive, you can crash your car and drop your drink!"
---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago

Vendo livro SCJP 5.0 da Kathy Sierra
Detalhe esse livro é campeão, já me fez passar na prova
jaboot
JavaEvangelist

Membro desde: 01/07/2005 14:25:37
Mensagens: 314
Localização: São Paulo
Offline

rafaelglauber wrote:
Obs.: o "this" é usado para apontar algo da propria classe, geralmente utilizado qdo parametros de metodos tem o mesmo nome de um atributo da classe.


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.


Rojas wrote:Se não me engano, na versão 1.4 da JVM, isto causava estouro da pilha.


É isso mesmo, vai estourar a pilha, certeza. Resolvido.

This message was edited 2 times. Last update was at 28/08/2008 14:05:32

[MSN] [ICQ]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team