Membros de instância X Membros de classe

Alguém poderia, por favor, me explicar a diferença entre membros de instância e membros de classe ?
Procurei aqui no fórum e não encontrei nada específico, obrigado a todos.

“membros de classe” pode estar querendo dizer “membros estáticos” (marcados com ‘static’) já que membros estáticos sempre serão iguais para qualquer instância da mesma classe, enquanto membros de instância são atributos não-estáticos de uma classe.

mas como eu disse, PODERIA ser… sem mais informações essa é a unica interpretação que eu consigo fazer…

Dá uma olhada aqui no GUJ mesmo em Artigos e Tutoriais > Aprendendo Java > Entendendo static. Tá bem explicadinho.

Membros da classe pertecem a classe, vc nao precisar dar um new nele para acessar o valor, ele é válido para toda a instancia do programa, todo FINAL é static por default.
Já membros de instancia percetem ao objeto.

Se eu estiver errado me ajudem, sempre tive um problema enorme com static e non-static haha.

[quote=sephct]Membros da classe pertecem a classe, vc nao precisar dar um new nele para acessar o valor, ele é válido para toda a instancia do programa, todo FINAL é static por default.
Já membros de instancia percetem ao objeto.

Se eu estiver errado me ajudem, sempre tive um problema enorme com static e non-static haha.[/quote]

Cara de onde vc tirou que todo FINAL é static???

flwsss

eu nao sei se é static por default, mas pelo conceito de final que eu tenho ele de uma certa forma já é static, ou não?

Não. Final significa que o valor não muda ( o valor que passar é o final). Significa que é imutável ( é final ).
Se fosse a mesma coisas não precisaria escrever

public final static double PI;

Static signfica que pertence ao escopo da classe . O padrão do Java é as coisas pertencerem ao escopo da instância ( objeto) , por isso não ha uma palavra para significar isso. Só precisa diferenciar usando static para quando quer usar o escopo da classe.

O escopo da instancia é maior que o da classe, ou seja, o escopo de instancia contém o da classe, mas o da classe não contém o de instancia. Por isso que uma instancia pode acessar os membros da classe (static) mas a classe não pode acessar os da instância.

membro pode ser qualquer coisa, desde variáveis ( atributos) , métodos, construtores ou até definições de outras classes, interfaces ou enum.

Quando se diz “crie um método de classe” significa crie um método classificado com static.

Muito obrigado pela resposta de todos mas ainda não está muito claro pra mim o que é o ‘escopo da instância’. Poderia me explicar melhor, por favor ?

Vc sabe o que é escopo ? comece por ai

Sim, sei o que é escopo

Saco só:

[code]class Bope{
public nome;
public static missao;
}

public class Exemplo {

public static void main(String [] args){

	Bope capitao  = new Bope();  
	capitao.nome = "Nascimento";  

	Bope aspira = new Bope();  
	aspira.nome = "Mathias";  

	capitao.missao = "defender o brasil";  

	assert aspira.missao.equals(capitao.missao) : "a missao dos oficiais do bope deve ser a mesma";
	assert !aspira.nome.equals(capitao.nome) : "o nome dos oficiais nao deve ser ser o mesmo";
	System.out.println("ok, ja aprendi tudo sobre static!");
}

}[/code]

Edit: estava errado o codigo, arrumei em algo compilável!

Acho que fala por sí só :slight_smile:

Para mais informações
http://guj.com.br/java.tutorial.artigo.121.1.guj

assim:

membro de classe: sao aqueles que pertence a classe, os static
membro de instancia: aqueles que peretence a intancia, ou seja, aos objetos.

exemplo:
Se vc tem a classe pessoa e essa “pessoa” tem dois filhos jose e maria. E cada uma tem sua idade, que pertence a eles mesmo e nao a pessoa que gerou eles. Se ambos tiver a mesma idade pura conscidencia se ter nascido no mesmo dia.

class Pessoa
int idade=0;
//configurando a idade de cada um
Pessoa(int d){
idade = d
}
//metodo main aqui
Pessoa  maria = new Pessoa(10);
Pessoa jose = new Pessoa(17);
//exibi a idade referente a instancia da class Pessoa
System.out.println(maria.idade);
System.out.println(jose.idade);

Acima foi um esboço para vc entender, se fosse static os valores sao compartilhados ja que com static os membros pertencem a classe.
flw! espero ter ajudado :smiley:

Eu pude perceber o seguinte:
Nesse exemplo do peczenyj, ao pedir para imprimir ‘aspira.missao’ ele mostra a mesma coisa do ‘capitao.missao’, o que não acontece caso a variável missao não seja static. Mas também é possível ‘sobrescrever’ essa variável… é isso ?

Em relação a membro de instância, eu entendi isto: quando você instancia uma classe, aquela variável criada é uma variável de instância, por exemplo

Pessoa maria = new Pessoa(); //maria é uma variável de instância

E variável de classe é o idade, criado nesse exemplo do LPJava.

O artigo que você mandou eu já tinha lido, peczenyj, mas obrigado pela dica.
Por favor, me corrijam se eu tiver falado algo - ou tudo - errado.
Obrigado pela atenção de todos.

Ok,

Tudo o que vc declara DENTRO de uma classe, mas FORA de um método são atributos.
Um atributo pode ser estatico se tiver a palavra chave ‘static’, que pode ser aplicado também para métodos.

Então

public class AlgumaCoisa { Pessoa maria = new Pessoa(); ... }

maria é um atributo de instância, com visibilidade default.

public class AlgumaCoisa { public void xxx(){ Pessoa maria = new Pessoa(); ... } }

nesse caso maria é uma variavel local, do método xxx.

Caso fosse

public class AlgumaCoisa {
   public void xxx(){
   String maria;
   ...
   }
}

maria também seria uma variável local, então ?

o exemplo que eu passei e o seu são a mesma coisa

a diferença é que no seu a variavel não foi inicializada.

[quote=mid_]Caso fosse

public class AlgumaCoisa {
   public void xxx(){
   String maria;
   ...
   }
}

maria também seria uma variável local, então ?[/quote]
sim!

Ok, creio ter entendido, obrigado a todos que responderam.