I'sou muito novo em Java e quero entender a diferença entre as variáveis de classe e as 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 de classe são diferentes umas das outras? Que variáveis aqui são variáveis de classe e quais são variáveis de instância? Como isso afeta o escopo?
Ambas são variáveis member, o que significa que ambas estão associadas a uma classe. Agora, é claro, há diferenças entre as duas:
Variáveis de situação:
Estas variáveis pertencem à instância de uma classe, portanto um objeto. E cada instância dessa classe (objeto) tem a sua própria cópia's dessa variável. As mudanças feitas na variável don't 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 estáticas de membros e lá's apenas uma cópia daquela variável que é compartilhada com todas as instâncias daquela classe. Se forem feitas alterações 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;
}
}
Utilizei métodos não estáticos para obter e definir o valor de Barcode
para poder chamá-lo a partir do objeto e não a partir da classe. A saída será a seguinte:
987654
987654
É explicado aqui (com um exemplo de classe Bicycle
com variável de classe numberOfBicycles
e variáveis de instância cadence
, speed
, gear
& id
):
às vezes, você quer ter variáveis que são comuns a todos os objetos. Isto é conseguido com o modificador
estático'. Os campos que têm o modificador
estático' em sua declaração são chamados de campos estáticos ou variáveis de classe. Eles sã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 variáveis de classe também podem ser manipuladas sem a criação de 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
estática'). Há apenas uma variável desse tipo (isto é, localização) comum a todas as instâncias e à classe. Então se você modificar a numberOfBicycles' em um método, outros métodos verão o novo valor (mesmo para diferentes objetos
Bicycle')
Em contraste, gear
& id
são variáveis de substância (porque sua declaração não tem modificador estático'). Cada objeto
Bicicletatem o seu próprio objeto. Se você modificar
gearpara algum
Bicycle*a*, e se *b* for outra instância, modificar
a.gearnão tem efeito sobre
b.gear`.
Cada objeto Java é uma zona de memória distinta com alguns meta dados (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 Object (computer science) & Instance variable wikipages.
Instance Variable:
As 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 essa variável de instância pertence ao objeto.
As variáveis de instância têm um valor separado de cada instância de a turma.
Class InstanceDemo {
// esta variável de instância é visível para qualquer classe infantil.
public String name = "Testing";
// variável de contagem é visível apenas na classe Demo.
int contagem privada = 2;
}
Método para acessar a variável de instância:
Demonstração InstanceDemo = nova InstanceDemo ();
System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );
Saída: 2 , Testes
Variável de classe:
A variável de classe pertence à classe.
A variável de classe é criada pela adição da palavra-chave "estática" antes da variável.
Também chamada variável estática.
E a variável de classe mais importante mantém um único valor compartilhado para toda instância de uma classe, mesmo que nenhum objeto de instância da classe existe.
ClasseDemo {
// variável de contagem é a mesma para todas as instâncias desta classe
contagem de int estática pública = 2;
}
Método para acessar a variável de classe:
System.out.println("variável de classe de acesso: " + ClassDemo.count ); //variável de classe é diretamente referida com o nome da classe
Saída: 2
Diferença entre Variável de Classe e Variável de Instância: