MINHA DÚVIDA
====================================================================================
Me corrijam se eu estiver errado, mas pelo que eu intendi, quando criamos um objeto que possui atributos, o que vai para memória não são os atributos indiciduais e sim o objeto completo com seus atributos e metodos.
Exemplo
um tipo primitivo, ao criarmos uma variável do tipo int estamos separando um local na memoria para atribuir um valor inteiro.
Quando criamos um objeto da seguinte classe
class Pessoa{
String nome;
int idade;
double peso;
}
e ao chamarmos
new Pessoa();
na memória ele está separando um espaço para o objeto pessoa que possui esses três atributos nome, idade e peso,
e não separando espaços individuais para cada atributo.
nesse caso se eu criar
Pessoa p1 = new Pessoa();
Pessoa p2 = new Pessoa();
estou separando dois espaços na memória para armazenar dois objetos do tipo Pessoa, e cada um deles possuem três atributos distintos.
p1.nome e p2.nome são atributos distintos armazenados nos objetos Pessoas que estão na memória.
já se declararmos a variável nome do tipo static, a variável passa a não ser mais de cada objeto e sim da classe, então quer dizer que a partir dessa declaração, na memória haverá um espaço para a variável e dois espaços para os objetos,
então os atributos p1.nome e p2.nome farão referência ao espaço reservado para a variável ?
CONTEÚDO DA APOSTILA
=========================================================================
Pessoa to vendo aqui na apostila da CAELUM e diz o seguinte:
Nosso banco também quer controlar a quantidade de contas existentes no sistema. Como poderíamos fazer
isto? A idéia mais simples:
Conta c =new Conta();
totalDeContas = totalDeContas + 1;
Aqui, voltamos em um problema parecido com o da validação de CPF. Estamos espalhando um código por
toda aplicação, e quem garante que vamos conseguir lembrar de incrementar a variável totalDeContastoda
vez?
Tentamos então, passar para a seguinte proposta:
class Conta {
private int totalDeContas;
//...
Conta() {
this.totalDeContas = this.totalDeContas + 1;
}
}
Quando criarmos duas contas, qual será o valor dototalDeContasde cada uma delas? Vai ser 1. Pois cada
uma tem essa variável.O atributo é de cada objeto.
Seria interessante então, que essa variável fosseúnica, compartilhada por todos os objetos dessa classe.
Dessa maneira, quando mudasse através de um objeto, o outro enxergaria o mesmo valor. Para fazer isso em
java, declaramos a variável como static.
private static int totalDeContas;
Quando declaramos um atributo comostatic, ele passa a não ser mais um atributo de cada objeto, e sim
umatributo da classe, a informação fica guardada pela classe, não é mais individual para cada objeto.