A diferença entre class variables
e instance
variáveis é simplesmente uma questão de who knows what?
.
Um instance variable
só é conhecido (= ligado ) a essa instância concreta - daí o nome.
public class Person {
private String firstName;
private String lastName;
[...]
}
A definição de uma classe é como um modelo para a construção de objetos concretos . Talvez este ponto o confunda um pouco. Mas, escrevendo dessa maneira, cada variável seria vinculada ao seu objeto concreto: por exemplo, cada pessoa tem seu próprio firstName
A, class variable
por outro lado, é - como o nome diz - conhecido por todo e qualquer membro de uma classe; ou tecnicamente: é conhecido / vinculado no nível da classe . O exemplo típico é um contador de quantos objetos você criou - embora seja um exemplo muito problemático; mas isso não importa nesta fase inicial.
public class Person {
private String firstName;
private String lastName;
[...]
static int numberOfPersons = 0
}
numberOfPersons
é declarado static
qual é a palavra-chave para distinguir entre class variables
e instance variabes
. A variável é declarada como as outras dentro da definição de classe. Mas a static
palavra - chave sinaliza que é diferente.
firstName
, lastName
são variáveis de instância e vinculados a essa instância concreta
numberOfPersons
está vinculado à classe, para que cada instância possa acessar essa variável.
tl; dr
O local onde as variáveis são definidas é a definição da classe.
As variáveis de classe são conhecidas no / bound ao nível da classe, ou seja, cada instância concreta tem acesso a ela. Para definir uma variável de classe, você usa a palavra-chave static
.
As variáveis de instância são conhecidas apenas no nível da instância. Você os define sem a static
palavra - chave.
Mais documentação para Java está aqui