| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2006 16:55:29
|
nandobgi
Java Ninja
![[Avatar]](/images/avatar/45ab12afa05e563bb484781693dffc87.jpg)
Membro desde: 27/03/2006 07:27:06
Mensagens: 282
Localização: Sampa
Offline
|
Boa tarde Pessoal
Gostaria de tirar uma dúvida no seguinte código abaixo
1. SuperClasse:
2. SubClasse:
Bem a minha dúvida é o seguinte, sei que quando instancio um objeto de uma subclasse o construtor da superClasse é chamada primeiro e assim sucessivamente até o topo da hierarquia, sei também que um bloco static e sempre executado antes da criação do objeto.
O código acima exibe primeiro as instruções do bloco static da superClasse em seguida o bloco static da subclasse só depois as instruções contidas nos construtores. Não entendi como a VM entendi que existe um bloco static em uma classe acima.
Obrigado.
|
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2006 16:59:39
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Como assim "entende"?
Quando a JVM carrega uma classe, ela é obrigada a carregar também tudo que ela referencia, por exemplo, sua superclasse.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2006 17:07:55
|
albiere
JavaChild
Membro desde: 08/08/2006 09:23:04
Mensagens: 134
Localização: São Paulo - SP
Offline
|
Naum deu pra entender sua pergunta direito naum cara...
como assim entende??? ela foi criada assim... rs
|
"Java and Ruby!" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2006 17:23:05
|
nandobgi
Java Ninja
![[Avatar]](/images/avatar/45ab12afa05e563bb484781693dffc87.jpg)
Membro desde: 27/03/2006 07:27:06
Mensagens: 282
Localização: Sampa
Offline
|
Desculpe não ficou muito claro.
Seguinte sempre que eu tiver um bloco static em um superclasse esse vai ser executado antes de qualquer coisa? Mesmo antes dos construtores das Subclasses?
Obrigado
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2006 18:32:54
|
bbviana
JavaChild
![[Avatar]](/images/avatar/89c0a463cc070b6c547ce09aa59abd5f.jpg)
Membro desde: 24/07/2006 13:11:57
Mensagens: 111
Localização: São Paulo
Offline
|
Entao, vc precisa diferenciar o conceito de carregar uma classe e instanciar uma classe.
Carregar uma classe é carrega-la pra memoria (O ClassLoader do java faz isso) ao passo q instanciar uma classe é usar o operador "new".
Os construtores soh sao chamados qdo vc usa o "new", nunca em outra ocasião.
Os blocos static sao executados qdo sua classe é carregada pelo Java. E isso só ocorre uma vez.
Faça o teste: de varios new na sua classe e vc vai ver q o bloco static soh eh executado uma vez, ao passo q os construtores nao.
Respondendo a sua pergunta: sim, os blocos static sao sempre executados antes dos construtores.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2006 18:35:17
|
rissato
JavaEvangelist
![[Avatar]](/images/avatar/e355ad06c5a89f911fbb0aff2de52435.jpg)
Membro desde: 16/05/2006 22:07:12
Mensagens: 446
Localização: Uberlândia
Offline
|
ela não entende, ela simplismente vê e executa... (oO)
|
Quer vc pense que é capaz ou não, vc está certo!
Sun Certified Java Programmer 6.0 |
|
|
 |
|
|