A diferença entre class variablese instancevariáveis é simplesmente uma questão de who knows what?.
Um instance variablesó é 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 variablepor 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 staticqual é a palavra-chave para distinguir entre class variablese instance variabes. A variável é declarada como as outras dentro da definição de classe. Mas a staticpalavra - chave sinaliza que é diferente.
firstName, lastNamesã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 staticpalavra - chave.
Mais documentação para Java está aqui