Construtores  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
fenemeth
Debugger

Membro desde: 17/01/2008 16:25:53
Mensagens: 71
Offline

Pessoal, estou estudando para a certificação SCJP 5. Na parte de construtores fiquei com algumas dúvidas. Tentarei fazer um breve resumo do que entendi, assim se eu cometer algum erro por favor me corrijam.
Construtores são sempre chamados na hora da instanciação de um objeto e possuem o mesmo nome de sua classe.

toda classe chama o construtor de sua super classe até chegar na classe Object, que é o topo da pilha.

Sem sobrecarga de construtores, temos 3 diferentes situações em uma classe, são elas:

a. A classe não possui construtor algum

Quando isso acontece, o compilador inclui implicitamente um construtor padrão em nosso código. A saber, o construtor padrão é aquele que não recebe argumento algum e chama sua superclasse. Exemplo:



b. A classe possui construtor padrão

c. A classe possui um construtor que não é padrão

Nesse caso o compilador entre em cena novamente com seus códigos implícitos. Vejam o exemplo:

Importante lembrar que quando definimos qualquer construtor, o compilador não irá mais colocar para nós o construtor padrão.

Agora vamos cobrir alguns detalhes quando há sobrecarga de construtores. Vejamos um exemplo:



Bem, com esse exemplo podemos relembrar alguns conceitos:
I) A classe que tiver qualquer construtor definido, que não seja o padrão, não permite que o compilador construa implicitamente o construtor padrão, para tê-lo é necessário construí-lo explicitamente também.
II) Toda classe ao ser instanciada deve invocar o construtor da classe pai, por esse motivo que todos os método possuem implicitamente o código super(), quando não há chamada a outro construtor através do this(), como veremos adiante.


Ainda em sobrecarga de construtores, definiremos o exemplo novamente, com alguns novos conceitos:



Não me lembro agora como é chamado esse conceito, creio que seja o encadeamento de construtores, mas não sei se podemos aplicar esse nome para esse efeito na classe, o que me pareceu no livro, o encadeamento de construtores é a chamada de construtor da classe pai até chegar na classe Object.

Bem, o que acontece aqui então é que o construtor com 2 parâmetros invoca o construtor com 3 parâmetros, passando para ele os 2 parâmetros recebido mais um valor defautl, que no nosso exemplo é 0 (zero). Então no construtor de 3 parâmetros, ao receber, na primeira linha, como notamos, irá chamar o construtor padrão, que irá chamar a classe pai, e então ativar o encadeamento de construtores. Após isso, então será atribuído as variáveis da classe os valores recebido.


Regras para construtores em classe estendida. Vejamos o código para estudá-lo:



Esse código rodaria perfeitamente, pois a classe Base2 invoca o construtor padrão de Base1, que esta definido implicitamente pelo compilador.
Agora imagine a seguinte situação:



Faço a pergunta, esse código irá rodar ?? Não. Porque ?? Simples, no construtor de base2, como vemos, há o código implícito chamando o construtor padrão de Base1, sua superclasse, e como em Base1 definimos um método que recebe uma String, e como já dito, o compilador não irá colocar o construtor padrão. Resumindo em Base1 não há construtor padrão e Base2 faz chamada justamente para o construtor padrão.
Como faríamos para esse código funcionar ?? Basta adicionar uma chamada explícita para Base1(String a)(classe pai) no construtor de Base2. Para isso ficaria:



A saber, as subclasses devem sempre chamar sua classe pai, mas para isso devem sempre fazer chamadas a construtores existentes em suas superclasses. Para não cometermos erro devemos sempre lembrar, que todo construtor possui ou uma chamada a um outro construtor de sua classe, com a chamada this(), ou uma chamada a sua superclasse com super(), não é permitido ter this() e super() no mesmo construtor. E devemos lembrar também que se um construtor não tem explicitamente this(), nem super(), implicitamente ele terá super().

Espero correções, dúvidas e sugestões.
Obrigado, by Felipe Nemeth.






This message was edited 1 time. Last update was at 30/04/2008 14:21:01

Marcio Duran
GUJ Master
[Avatar]

Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline

Nas execeções por correspondência como o construtor trabalha, já que você por definição você demonstrou o que é construtor.


Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven
[WWW]
fenemeth
Debugger

Membro desde: 17/01/2008 16:25:53
Mensagens: 71
Offline

Cometi algum erro na explicação de como trabalha os construtores ?
Marcio Duran
GUJ Master
[Avatar]

Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline

fenemeth wrote:Cometi algum erro na explicação de como trabalha os construtores ?



Você quer entender construtor, ou simplesmente definir construtor, se definir já não há o que entender sobre construtores ?

Objeto ou Construtor ou ao todo! ? O construtor tem diferentes angulos de sua defnição, no que diz respeito a execeções por correspondência eu não teria um construtor isso é possivel.

Mesmo que execeções trabalham com regras e essas regras diz respeito ao comportamento do objeto sendo este tendo ou não um construtor por definição.


This message was edited 2 times. Last update was at 29/04/2008 20:14:19


Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven
[WWW]
dark_creator
JavaBaby

Membro desde: 07/09/2006 16:31:02
Mensagens: 84
Offline

Bom, eu também estou estudando para a prova pelo livro da kathy, SCJP 5 mas pretendo fazer a 6, fiquei com uma duvida sobre a relação entre construtores e classes internas.
Sei que para que uma classe interna ser instanciada primeiro devemos ter um objeto da classe externa (a não ser que a classe interna seja static) ou sejá já há um objeto, um construtor da classe externa já foi chamado, e mesmo assim ainda há a chamada implicita dentro do construtor da classe interna para o construtor da classe externa?
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

a regra é simples: Toda classe ela tem um construtor.. TODAS e se vc nao declarar nenhum ELA tem um construtor implicito que chama o da super class... mais lembre-se disso viu uma classe ela tem um construtor mesmo que vc nao declare....



Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
[WWW]
fenemeth
Debugger

Membro desde: 17/01/2008 16:25:53
Mensagens: 71
Offline

Marcio Duran wrote:
fenemeth wrote:Cometi algum erro na explicação de como trabalha os construtores ?



Você quer entender construtor, ou simplesmente definir construtor, se definir já não há o que entender sobre construtores ?

Objeto ou Construtor ou ao todo! ? O construtor tem diferentes angulos de sua defnição, no que diz respeito a execeções por correspondência eu não teria um construtor isso é possivel.

Mesmo que execeções trabalham com regras e essas regras diz respeito ao comportamento do objeto sendo este tendo ou não um construtor por definição.




Sim cara, eu tentei definir os construtores, sendo que aprendi na sintese desse tópico. Creio que em relação a pergunta "Objeto ou Construtor ou a todo?", tentei me referir ao todo, não sei se consegui .


Mas isso aí, vlw pela contribuição no tópico.
fenemeth
Debugger

Membro desde: 17/01/2008 16:25:53
Mensagens: 71
Offline

dark_creator wrote:Bom, eu também estou estudando para a prova pelo livro da kathy, SCJP 5 mas pretendo fazer a 6, fiquei com uma duvida sobre a relação entre construtores e classes internas.
Sei que para que uma classe interna ser instanciada primeiro devemos ter um objeto da classe externa (a não ser que a classe interna seja static) ou sejá já há um objeto, um construtor da classe externa já foi chamado, e mesmo assim ainda há a chamada implicita dentro do construtor da classe interna para o construtor da classe externa?


Hummm, certo. Estou estudando pelo SCJP 5, e também pretendo fazer a 6. Em relação a classes internas, não cheguei nessa parte ainda. Estou terminando cap 2. Estou cobrindo a parte de statics..

Mas viu kra, oque vc achou sobre tudo isso que eu falei sobre construtores, teve alguma coisa errada ??

Grande abraço, vlw.
fenemeth
Debugger

Membro desde: 17/01/2008 16:25:53
Mensagens: 71
Offline

LPJava wrote:a regra é simples: Toda classe ela tem um construtor.. TODAS e se vc nao declarar nenhum ELA tem um construtor implicito que chama o da super class... mais lembre-se disso viu uma classe ela tem um construtor mesmo que vc nao declare....




Correto kra, falei disso no tópico. Uma parte que estou com dúvida consiste na seguinte situação, imagine:



Todos esse código implícitos estão corretos ?? Essa é a dúvida, quase sanada rsrs...

Grande abraço.
GustavoLaguna
JavaTeenager
[Avatar]

Membro desde: 06/04/2006 15:58:47
Mensagens: 162
Localização: Mirassol/SP
Offline

Sim, voce terá um super() implicito, a não ser que declare explicitamente um super() ou this() com ou sem parametros.
Reilander
JavaChild
[Avatar]

Membro desde: 27/01/2007 21:28:37
Mensagens: 142
Localização: Feira de Santana - BA
Offline

faltou ai "Base2 extends Base1" na explicacao do fenemeth

This message was edited 1 time. Last update was at 30/04/2008 10:00:17


"Por mais sujo que esteja o meu passado, meu futuro está intacto..."
[Email] [MSN]
jc.thalys
JavaTeenager

Membro desde: 24/07/2006 09:07:56
Mensagens: 157
Offline

acho importante também estou estudando pra prova tbm, e tem mais uma regra:

quando vou chamar um construtor sobrecarregado com

SCJP 5, SCWCD 5, SCBCD 5
Test 000-377: IBM WebSphere Application Server Network Deployment V7.0, Core Administration
Test 000-669: SOA Fundamentals
[Email] [MSN]
Marcio Duran
GUJ Master
[Avatar]

Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline

fenemeth wrote:Bom, eu também estou estudando para a prova pelo livro da kathy, SCJP 5 mas pretendo fazer a 6, fiquei com uma duvida sobre a relação entre construtores e classes internas.
Sei que para que uma classe interna ser instanciada primeiro devemos ter um objeto da classe externa (a não ser que a classe interna seja static) ou sejá já há um objeto, um construtor da classe externa já foi chamado, e mesmo assim ainda há a chamada implicita dentro do construtor da classe interna para o construtor da classe externa?



Hummm, certo. Estou estudando pelo SCJP 5, e também pretendo fazer a 6. Em relação a classes internas, não cheguei nessa parte ainda. Estou terminando cap 2. Estou cobrindo a parte de statics..

Mas viu kra, oque vc achou sobre tudo isso que eu falei sobre construtores, teve alguma coisa errada ??

Grande abraço, vlw.


Na sua prova de certificação Java 5, vc não vai ter que dar essa explicação, a prova é objetiva e cada questão voce tera 1 minuto e alguns segundos para responder !!! vai ter o compilador na mente, e pra isso vai ter que ler o codigo fluentemente.
O que eu quiz tentar fazer, era lhe fazer vc perceber que seja construtor ele trabalha pelo comportamento do Objeto, se este leva o nome da classe, ou se pertence a uma regra ou nao.

Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven
[WWW]
fenemeth
Debugger

Membro desde: 17/01/2008 16:25:53
Mensagens: 71
Offline

GustavoLaguna wrote:Sim, voce terá um super() implicito, a não ser que declare explicitamente um super() ou this() com ou sem parametros.


Humm, blz Gustavo, entendi o conceito..Vlw, grande abraço.
fenemeth
Debugger

Membro desde: 17/01/2008 16:25:53
Mensagens: 71
Offline

Reilander wrote:faltou ai "Base2 extends Base1" na explicacao do fenemeth



Olooco cara, muito bem observado, editarei a mensagem. Vlw, grande abraço.
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team