| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/08/2008 09:03:25
|
paribe
JWizard
![[Avatar]](/images/avatar/4fc848051e4459b8a6afeb210c3664ec.jpg)
Membro desde: 22/08/2004 07:34:33
Mensagens: 2057
Offline
|
Folks,
porque o codigo abaixo não compila...
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/08/2008 09:10:04
|
rafaelglauber
GUJ Master
![[Avatar]](/images/avatar/e9abec5e32203998211653b45023be1c.jpeg)
Membro desde: 07/09/2007 23:05:20
Mensagens: 1065
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/08/2008 09:12:31
|
xxta
JavaBaby
Membro desde: 07/04/2008 13:09:17
Mensagens: 98
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
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/08/2008 09:31:15
|
rafaelglauber
GUJ Master
![[Avatar]](/images/avatar/e9abec5e32203998211653b45023be1c.jpeg)
Membro desde: 07/09/2007 23:05:20
Mensagens: 1065
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/08/2008 09:01:09
|
Rojas
JavaBaby
Membro desde: 30/06/2005 11:55:13
Mensagens: 82
Offline
|
Se não me engano, na versão 1.4 da JVM, isto causava estouro da pilha.
|
SCJP 6 | SCWCD 5 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/08/2008 09:51:34
|
thiago.correa
GUJ Master
![[Avatar]](/images/avatar/c37f9e1283cbd4a6edfd778fc8b1c652.jpg)
Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
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
|
---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/08/2008 09:55:06
|
g4j
GUJ Ranger
![[Avatar]](/images/avatar/bea3c20edb84a0dd83a99a9a7274bc67.jpg)
Membro desde: 02/05/2007 14:32:03
Mensagens: 817
Localização: Curitiba
Offline
|
Mas só existe uma classe pública no código dele, não?
|
Gerson Luiz Chagas
SCJP 5.0
SCWCD 5.0
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/08/2008 10:04:37
|
thiago.correa
GUJ Master
![[Avatar]](/images/avatar/c37f9e1283cbd4a6edfd778fc8b1c652.jpg)
Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
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.
|
---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/08/2008 14:03:17
|
jaboot
Virtual Machine Man
Membro desde: 01/07/2005 14:25:37
Mensagens: 749
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
|
|
|
 |
|
|