Metodo nao static

ae pessoal me surgiu uma duvida pq metodos nao static pode manipular variaveis static?

class Met{

static int a = 10;
public void setA(int z){
a=z;
}
public static void main(String args[]){
Met m = Met();
m.setA(30);
}
}

pq se eu mandar imprimir vai ser 30… eu li que membros nao static nao pode acessar membros static e virse-versa… ou to confudindo com algo?

Opa. Uma variável static é compartilhada por todas as intâncias, então pode ser acessada por qualquer uma.

Você não pode acessar variáveis de instância dentro de um método static, a não ser que especifique a instância.

Exemplo.: (Errado)


public class Teste
{
         String massa;

         public static void main(String[] args)
         {
                 massa = "oi"; // Erro;
         }
}

Você pode alterar sim.
A questão é que o atributo static fica sendo como da classe, então todas as instâncias desta classe irão utilizar o mesmo atributo. Sendo assim, quando você definir o valor em uma instância todas as outras instâncias irão lhe responder o mesmo valor. Da mesma forma será se você acessar o atributo diretamente da classe.

:?entao de um membro nao static posso acessa um static?
mais de um static nao posso acesar um nao static?

[quote=camilolopes] :?entao de um membro nao static posso acessa um static?
mais de um static nao posso acesar um nao static?
[/quote]
sim

É interessante entender que um membro não-static DEPENDE do objeto para existir, e um membro static INDEPENDE do objeto para existir. Se eu me referenciar a uma variável não-static dentro de um método static, quem me garantirá que o objeto que contém esse membro foi instanciado??? Isso porque a variavel em questao DEPENDE da criação de um objeto.
O contrário agora fica meio óbvio. Qualquer membro static existe na memória quando o programa entra em execução. Logo, nao existe o problema desse membro “não existir”, porque ele INDEPENDE da instância de um objeto.

Se nao ficou claro, especifica ai onde ta tua duvida que nois manda bala!