Quais são as diferenças entre variáveis de classe e variáveis de instância em Java? [fechado]
On Janeiro 1, 2021 by adminComentários
- Você parece ter começado a ler Os tutoriais Java ™: Compreendendo os membros da classe que explica isso, mas não ' não compreendeu totalmente.
Resposta
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 cada instância dessa classe (objeto) tem sua própria cópia dessa variável. As alterações feitas na variável não se refletem em outras instâncias dessa classe.
public class Product { public int Barcode; }
Variáveis de classe:
Estas também são conhecidas como variáveis de membro estático e há apenas uma cópia dessa variável que é compartilhada com todas as instâncias dessa classe. Se alterações forem feitas nessa variável, todas as outras instâncias verão o efeito das alterações.
public class Product { public static int Barcode; }
Exemplo completo:
// INSTANCE VARIABLE public class Main { public static void main(String[] args) { Product prod1 = new Product(); prod1.Barcode = 123456; Product prod2 = new Product(); prod2.Barcode = 987654; System.out.println(prod1.Barcode); System.out.println(prod2.Barcode); } } public class Product { public int Barcode; }
A saída será:
123456
987654
Agora, altere a variável de instância para uma variável de classe, tornando-a estática:
//CLASS VARIABLE public class Main { public static void main(String[] args) { Product prod1 = new Product(); prod1.setBarcode(123456); Product prod2 = new Product(); prod2.setBarcode(987654); System.out.println(prod1.getBarcode()); System.out.println(prod2.getBarcode()); } } public class Product { public static int Barcode; public int getBarcode() { return Barcode; } public void setBarcode(int value){ Barcode = value; } }
Usei métodos não estáticos para obtenha e defina o valor de Barcode
para poder chamá-lo do objeto e não fr om a classe. O resultado será o seguinte:
987654
987654
Comentários
- Por que um exemplo C # para uma questão Java?
- Minhas idéias exatamente. Eu só conheço programação Java, não C #, então você não ajudou muito
- @BasileStarynkevitch I ' m principalmente um desenvolvedor C # e, uma vez que o princípio conta para ambos e é tão bom quanto o mesmo, rapidamente forneci um C # exemplo, errado da minha parte, é claro. 🙂 Mudei meu exemplo para Java.
- @SkylarAdams Desculpe, eu erroneamente presumi muito rapidamente que qualquer pessoa que conhece Java conhece C #. Mudei o exemplo para um Java, espero que ajude.
- Para esse tipo de pergunta, acho que é irrelevante, seja usando Java ou C #,
Resposta
É explicado aqui (com um exemplo Bicycle
classe com variável de classe numberOfBicycles
e variáveis de instância cadence
, speed
, gear
& id
):
Às vezes, você deseja ter variáveis comuns a todos os objetos. Isso é feito com o modificador
static
. Os campos que possuem o modificadorstatic
em sua declaração são chamados de campos estáticos ou variáveis de classe. Eles estão associados à classe, e não a qualquer objeto. Cada instância da classe compartilha uma variável de classe, que está em um local fixo na memória. Qualquer objeto pode alterar o valor de uma variável de classe, mas as variáveis de classe também podem ser manipuladas sem criar uma instância da classe.
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 é declarada static
). Existe apenas uma variável (ou seja, localização) comum a todas as instâncias e à classe. Portanto, se você modificar numberOfBicycles
em um método, outros métodos verão o novo valor (mesmo para objetos Bicycle
diferentes)
Em contraste, gear
& id
são variáveis de instância (porque sua declaração não tem modificador static
). Cada objeto Bicycle
tem seu próprio objeto. Se você modificar gear
para algum Bicycle
a , e se b for outro Por exemplo, modificar a.gear
não tem efeito em b.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.
Veja também Objeto (ciência da computação) & Variáveis de instância wikipages.
Resposta
Variável de instância:
- Variáveis de instância são declaradas em uma classe, mas fora de um método, construtor ou qualquer bloco.
- A variável de instância pertence à instância de uma classe ou você pode dizer que a variável de instância pertence ao objeto.
-
A variável de instância tem valor separado de cada instância da classe.
Class InstanceDemo { // this instance variable is visible for any child class. public String name = "Testing"; // count variable is visible in Demo class only. private int count = 2; }
Método para acessar a variável de instância:
InstanceDemo demo = new InstanceDemo (); System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );
Resultado: 2, Teste
Variável de classe:
- A variável de classe pertence à classe.
- a variável de classe é criada adicionando a palavra-chave “estática” antes da variável.
- Também chamada de variável estática.
-
E a variável de classe mais importante mantém um único valor compartilhado para todas as instâncias de uma classe, mesmo se não houver objeto de instância da classe.
Class ClassDemo { // count variable is Same for all instance of this class public static int count = 2; }
Método para acessar a variável de classe:
System.out.println("Access Class variable: " + ClassDemo.count ); //class variable is directly refer with class name
Resultado: 2
Breve diferença entre variável de classe e variável de instância:
- Variáveis de instância têm valores separados para cada instância de uma classe. Variáveis de classe mantêm um único valor compartilhado para todas as instâncias da classe, mesmo se nenhum objeto de instância dessa classe existir.
- Você usaria a palavra-chave estática para transformar uma variável de instância em uma variável de classe.
- As variáveis de instância e classe são declaradas no nível da classe, não dentro dos métodos.
Resposta
A diferença entre as variáveis class variables
e instance
é simplesmente uma questão de who knows what?
.
Um instance variable
é apenas conhecido (= vinculado ) para essa instância concreta – daí o nome.
public class Person { private String firstName; private String lastName; [...] }
A definição de uma classe é como um blueprint para construir objetos concretos . Talvez este ponto confunda você um pouco. Mas, escrevendo desta forma, cada variável seria ligada ao seu objeto concreto: por exemplo, Cada pessoa tem seu próprio primeiroNome
Um class variable
por outro lado é – como o nome diz – conhecido por cada um dos membros de uma classe; ou tecnicamente: é conhecido / limitado no nível de classe . O exemplo típico é um contador de quantos objetos você criou – embora seja um exemplo muito problemático; mas isso não importa neste estágio inicial.
public class Person { private String firstName; private String lastName; [...] static int numberOfPersons = 0 }
numberOfPersons
é declarado static
que é a palavra-chave para distinguir entre class variables
e instance variabes
. A variável é declarada como as outras na definição de classe . Mas a static
palavra-chave sinaliza que é diferente.
-
firstName
,lastName
são variáveis de instância e vinculadas 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 da classe são conhecidas / vinculadas ao nível da classe, ou seja, cada concreto instância tem acesso a ele. Para definir uma variável de classe, você usa a palavra-chave static
.
I Variáveis de instância são conhecidas apenas em nível de instância. Você os define sem a static
palavra-chave.
Documentação adicional para Java está aqui
Deixe uma resposta