Métodos estáticos - qual a saida do código abaixo?  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
André Fonseca
JWizard
[Avatar]

Membro desde: 23/02/2007 15:52:55
Mensagens: 2034
Offline



Qual o valor de x? Alguem chuta? tem a ver com o fato de toda variavel de classe (static) ser inicializada em um bloco estático

1) x igual a 0
2) x igual a 6
3) x igual a 7
4) x igual a 13


Você é novo no GUJ?


Como fazer perguntas?



www.twitter.com/_afonseca
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

puts acho que vou debugar isso ai kkk

This message was edited 1 time. Last update was at 10/11/2009 12:39:10

entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

O código acima equivale a:


This message was edited 1 time. Last update was at 10/11/2009 12:45:24

evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

po Andre pq o resultado foi 6 rs, tem como vc da uma explicada ai?
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

do jeito que ta o cod do entanglement eu entendi, mas do jeito do Andre nao, como vc desmembrou esse static entanglement?


This message was edited 1 time. Last update was at 10/11/2009 12:49:04

entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Regra bem simples:
a) Pegue todos os "static final" que são primitivos e deixe quietos. Eles são constantes e não são inicializados no bloco static, mas antes disso.

b) Crie um bloco static e copie as inicializações dos membros estáticos, uma por uma, na ordem em que aparecem na declaração da classe. Por isso, instance aparece antes de BASE.
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

puuuuuuuuuuta que pariu vc deu um tapa na cara do papa agora ehehe, vlw entanglement.
André Fonseca
JWizard
[Avatar]

Membro desde: 23/02/2007 15:52:55
Mensagens: 2034
Offline

entanglement wrote:O código acima equivale a:




é isso ai, vc achou o código aqui não foi?

quando inicializa o Foo o BASE está como 0 e como a constante nao é inicaliza no bloco estatico..
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

Me gerou uma duvida galera tem como me ajudar olha so:

se o codigo ficar assim a saida ficaria diferente? pq?

This message was edited 1 time. Last update was at 10/11/2009 15:16:15

André Fonseca
JWizard
[Avatar]

Membro desde: 23/02/2007 15:52:55
Mensagens: 2034
Offline

Olhando o código abaixo



Posso perceber que para a situacao 1 o construtor é chamado apenas uma vez, quando eu inicializo a variavel instance, o que é feito dentro do bloco estatico
Como quando eu faço isso a variavel BASE ainda está com o valor default de int (no caso 0) sera criado um objeto do tipo Foo que contem um valor x de 0 + 6 (constante)

Ja no segundo caso o construtor é chamado duas vezes, na primeira ele apenas cria o valor de instance com o mesmo valor de x = 0 + 6
Já na segunda vez que o construtor é chamado nesta situação o valor de BASE ja foi inicializado com 7, neste caso ele altera o valor de x para 7 + 6 = 13

Este código eu vi no link que passei acima

Mais detalhes pode ser visto em Static Initializers

Alias, a especificacao da JVM é um otimo lugar para sanar este tido de dúvida

Você é novo no GUJ?


Como fazer perguntas?



www.twitter.com/_afonseca
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team