Je suis très novice en Java et je veux comprendre la différence entre les variables de classe et les variables d'instance.
Par exemple :
class Bicycle {
static int cadence = 0;
int speed = 0;
int gear = 1;
}
En quoi les variables d'instance et les variables de classe sont-elles différentes les unes des autres ? Quelles variables sont des variables de classe et quelles sont des variables d'instance ? Comment cela affecte-t-il la portée ?
Ce sont toutes deux des variables membres, ce qui signifie qu'elles sont associées à une classe. Maintenant, bien sûr, il y a des différences entre les deux :
Variables d'instance:
Ces variables appartiennent à l'instance d'une classe, donc à un objet. Et chaque instance de cette classe (objet) possède sa propre copie de cette variable. Les modifications apportées à la variable ne se reflètent pas dans les autres instances de cette classe.
public class Product {
public int Barcode;
}
Variables de classe:
Elles sont également appelées variables membres statiques et il n'y a qu'une seule copie de cette variable qui est partagée avec toutes les instances de cette classe. Si des modifications sont apportées à cette variable, toutes les autres instances verront l'effet de ces modifications.
public class Product {
public static int Barcode;
}
Exemple complet:
// 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;
}
La sortie sera :
123456
987654
Maintenant, changez la variable d'instance en une variable de classe en la rendant statique :
//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;
}
}
J'ai utilisé des méthodes non statiques pour obtenir et définir la valeur de Barcode
afin de pouvoir l'appeler depuis l'objet et non depuis la classe. Le résultat sera le suivant :
987654
987654
Il est expliqué [ici][1] (avec un exemple de classe Bicycle
avec la variable de classe numberOfBicycles
et les variables d'instance cadence
, speed
, gear
& ; id
) :
Parfois, vous voulez avoir des variables qui sont communes à tous les objets. C'est possible avec le modificateur
static
. Les champs qui ont le modificateurstatic
dans leur déclaration sont appelés champs statiques ou variables de classe. Ils sont associés à la classe, plutôt qu'à un objet quelconque. Chaque instance de la classe partage une variable de classe, qui se trouve à un endroit fixe de la mémoire. Tout objet peut modifier la valeur d'une variable de classe, mais les variables de classe peuvent également être manipulées sans créer une instance de la classe.
Une variable de classe (déclarée static
) est un emplacement commun à toutes les instances.
Dans l'exemple, numberOfBicycles
est une variable de classe (puisqu'elle est déclarée static
). Il n'y a qu'une seule variable de ce type (i.e. location) commune à toutes les instances et à la classe. Donc si vous modifiez numberOfBicycles
dans une méthode, les autres méthodes verront la nouvelle valeur (même pour des objets Bicycle
différents)
En revanche, gear
& ; id
sont des variables d'instance (parce que leur déclaration n'a pas de modificateur static
). Chaque objet Bicycle
a sa propre variable. Si vous modifiez gear
pour un Bicycle
a, et si b est une autre instance, la modification de a.gear
n'a aucun effet sur b.gear
.
Chaque objet Java est une zone de mémoire distincte avec quelques méta-données (par exemple, une référence à sa classe) et ses propres variables d'instance (peut-être héritées d'une super-classe). Mais les variables de classe sont communes à la classe et partagées par toutes les instances.
Voir aussi les wikipages [Objet (informatique)][2] & ; [Variable d'instance][3].
[1] : https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html [2] : https://en.wikipedia.org/wiki/Object_%28computer_science%29 [3] : https://en.wikipedia.org/wiki/Instance_variable
Variable d'instance:
Les variables d'instance sont déclarées dans une classe, mais en dehors d'une méthode, d'un constructeur ou d'un bloc.
La variable d'instance appartient à l'instance d'une classe ou on peut dire que la variable d'instance appartient à l'objet.
Les variables d'instance ont une valeur distincte pour chaque instance de la classe. la classe.
Classe InstanceDemo {
// cette variable d'instance est visible pour toute classe enfant.
public String name = "Testing" ;
// la variable count est visible uniquement dans la classe Demo.
private int count = 2 ;
}
Méthode pour accéder à la variable d'instance:
InstanceDemo demo = new InstanceDemo () ;
System.out.println("Accès à la variable d'instance : " ; + demo.count + " ; , "+demo.name ) ;
Sortie: 2 , Testing
Variable de classe:
La variable de classe appartient à la classe.
La variable de classe est créée en ajoutant le mot clé "static" devant la variable.
Elle est également appelée variable statique.
Et le plus important, la variable de classe maintient une seule valeur partagée pour toutes les instances d'une classe, même si aucun objet d'instance de la classe n'existe. n'existe.
Classe ClassDemo {
// la variable count est identique pour toutes les instances de cette classe
public static int count = 2 ;
}
Méthode pour accéder à la variable de classe:
System.out.println("Access Class variable : " ; + ClassDemo.count ) ; //la variable de classe fait directement référence au nom de la classe
Sortie : 2
Différence brève entre la variable de classe et la variable d'instance: