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++;
[quote=“elvishr”]Ahhh… entendi, dentro do método metodoA(), a variavel incrementada é do parametro e nao a da classe, logo ela é eliminada …
[/quote]
Correto.
[quote=“elvishr”]
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?[/quote]
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().