Eu sou muito novo em Java e quero entender a diferença entre variáveis de classe e variáveis de instância.
Por exemplo:
class Bicycle {
static int cadence = 0;
int speed = 0;
int gear = 1;
}
Como as variáveis de instância e variáveis de classe são diferentes umas das outras? Quais variáveis aqui são variáveis de classe e quais são variáveis de instância? Como isso afeta o escopo?
Respostas:
Ambos são variáveis de membro , o que significa que ambos estão associados a uma classe. Agora, é claro, existem diferenças entre os dois:
Variáveis de instância:
Essas variáveis pertencem à instância de uma classe , portanto, um objeto. E toda instância dessa classe (objeto) tem sua própria cópia dessa variável. As alterações feitas na variável não refletem em outras instâncias dessa classe.
Variáveis de classe:
Também são conhecidas como variáveis de membro estáticas e há apenas uma cópia dessa variável que é compartilhada com todas as instâncias dessa classe. Se forem feitas alterações nessa variável, todas as outras instâncias verão o efeito das alterações.
Exemplo completo:
A saída será:
Agora, altere a variável de instância para uma variável de classe, tornando-a estática:
Usei métodos não estáticos para obter e definir o valor de
Barcode
poder chamá-lo do objeto e não da classe. A saída será a seguinte:fonte
É explicado aqui (com um exemplo
Bicycle
classe com variáveis classenumberOfBicycles
variáveis e instânciacadence
,speed
,gear
&id
):Uma variável de classe (declarada
static
) é um local comum a todas as instâncias.No exemplo,
numberOfBicycles
é uma variável de classe (uma vez que é declaradastatic
). Existe apenas uma variável (local), comum a todas as instâncias e à classe. Portanto, se você modificarnumberOfBicycles
em um método, outros métodos verão o novo valor (mesmo paraBicycle
objetos diferentes )Por outro lado,
gear
&id
são variáveis de instância (porque sua declaração não possuistatic
modificador). TodoBicycle
objeto tem o seu próprio. Se você modificargear
para algunsBicycle
a , e se b for outra instância, a modificaçãoa.gear
não terá efeito sobreb.gear
Cada objeto Java é uma zona de memória distinta com alguns metadados (por exemplo, alguma referência à sua classe) e suas próprias variáveis de instância (talvez herdadas de uma superclasse). Mas as variáveis de classe são comuns à classe e compartilhadas por todas as instâncias.
Consulte também as páginas de variáveis de objeto (ciência da computação) e instância .
fonte
Variável de instância:
A variável de instância possui um valor separado para cada instância da classe.
Variável de classe:
E a variável de classe mais importante mantém um único valor compartilhado para todas as instâncias de uma classe, mesmo que não exista nenhum objeto de instância da classe.
Breve diferença entre variável de classe e variável de instância:
fonte
A diferença entre
class variables
einstance
variáveis é simplesmente uma questão dewho knows what?
.Um
instance variable
só é conhecido (= ligado ) a essa instância concreta - daí o nome.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.numberOfPersons
é declaradostatic
qual é a palavra-chave para distinguir entreclass variables
einstance variabes
. A variável é declarada como as outras dentro da definição de classe. Mas astatic
palavra - chave sinaliza que é diferente.firstName
,lastName
são variáveis de instância e vinculados a essa instância concretanumberOfPersons
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
fonte