questão de certificação 4  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline


Qual o resultado?
a - imprime 0
b - imprime 1
c - dá erro na compilação
d - dá uma exception na execução
e - nenhuma das anteriores

Ana

SCJP 1.4 - SCWCD 1.4
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

0.
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
elvishr
JavaChild
[Avatar]

Membro desde: 01/04/2003 00:47:21
Mensagens: 117
Localização: Brasília/DF
Offline

Porque a certa é a letra a?

Elvis não morreu
SCJP 1.4
SCWCD 5.0
SCBCD 5.0
JBCAA
[ICQ]
caiofilipini
GUJ Master
[Avatar]

Membro desde: 26/06/2003 15:17:59
Mensagens: 1255
Localização: São Paulo
Offline

elvishr wrote:Porque a certa é a letra a?


Porque em Java, a passagem de parâmetros é por valor, e o método metodoA(int a) altera a cópia local da variável.

[]'s

Caio N. Filipini
"There is no spoon."
[Email] [WWW]
elvishr
JavaChild
[Avatar]

Membro desde: 01/04/2003 00:47:21
Mensagens: 117
Localização: Brasília/DF
Offline

sim, mas qual variavel a q é incrementada??
Entendi que a variavel a da classe foi incrementada e recebeu o valor 1.

Mas a variavel a do metodo main é local, por isso exibiu zero.

É isso mesmo??

Elvis não morreu
SCJP 1.4
SCWCD 5.0
SCBCD 5.0
JBCAA
[ICQ]
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline

Ao contrário...

A variável "a" dentro do método metodoA() é incrementada, mas assim que este método termina ela é "eliminada".
E a variável "a" static da classe (e não local do método main()!) continua com o mesmo valor que começou, por isso imprime 0.

O que acontece dentro do método metodoA() é chamado de shadowing ou sombreamento(tradução horrível! acho que fica melhor ocultar), ou seja, a variável local tem o mesmo nome de uma de instância ou classe, mas a local é a que é enxergada pelo método.

Para alterar a variável static bastaria mudar:
- colocando o nome da classe: Teste.a++
- trocar o nome do argumento (variável local) por um diferente de a
- se tivesse uma instância da classe(dentro de metodoA):
Teste t = new Teste();
t.a++;

Certo?

Ana

SCJP 1.4 - SCWCD 1.4
elvishr
JavaChild
[Avatar]

Membro desde: 01/04/2003 00:47:21
Mensagens: 117
Localização: Brasília/DF
Offline

Ahhh.. entendi, dentro do método metodoA(), a variavel incrementada é do parametro e nao a da classe, logo ela é eliminada ..

A variavel a do metodo main e do metodoA nao tem nada a ver com a variavel static a da classe Teste, so o nome q é o mesmo ..

Estou certo?

Elvis não morreu
SCJP 1.4
SCWCD 5.0
SCBCD 5.0
JBCAA
[ICQ]
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline

elvishr wrote:Ahhh.. entendi, dentro do método metodoA(), a variavel incrementada é do parametro e nao a da classe, logo ela é eliminada ..

Correto.

elvishr wrote:
A variavel a do metodo main e do metodoA nao tem nada a ver com a variavel static a da classe Teste, so o nome q é o mesmo ..

Estou certo?

Errado.

Só tem 2 variáveis com nome a.
A variável dentro do método main() É a variável static da classe!
E não tem nada a ver com a do metodoA().

Ana

SCJP 1.4 - SCWCD 1.4
phstc
JavaGuru

Membro desde: 13/04/2004 12:22:22
Mensagens: 200
Localização: São Paulo, SP
Offline

ana_abrantes wrote:
- colocando o nome da classe: Teste.a++


Acho que mais facinho seria
[Email]
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline

Em método estático não se pode usar this!

Ana

SCJP 1.4 - SCWCD 1.4
phstc
JavaGuru

Membro desde: 13/04/2004 12:22:22
Mensagens: 200
Localização: São Paulo, SP
Offline

ana_abrantes wrote:Em método estático não se pode usar this!


Muito obrigado, vou tentar não esquecer disso
[Email]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team