Quelles sont les différences entre les variables de classe et les variables dinstance en Java? [fermé]
On janvier 1, 2021 by adminCommentaires
- Vous semblez avoir commencé à lire Les didacticiels Java ™: Comprendre les membres de la classe qui explique cela, mais je nai ' pas tout compris.
Réponse
Ils sont tous les deux des variables membres , ce qui signifie que les deux sont associés à une classe. Maintenant, bien sûr, il y a des différences entre les deux:
Variables dinstance:
Ces variables appartiennent à l instance dune classe , donc un objet. Et chaque instance de cette classe (objet) a sa propre copie de cette variable. Les modifications apportées à la variable ne sont pas reflétées dans les autres instances de cette classe.
public class Product { public int Barcode; }
Variables de classe:
Elles sont également appelées variables de membre statiques et il ny a quune 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 leffet des 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; }
Le résultat sera:
123456
987654
Maintenant, changez la variable dinstance en 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; } }
Jai utilisé des méthodes non statiques pour obtenir et définir la valeur de Barcode
pour pouvoir lappeler à partir de lobjet et non de fr om la classe. Le résultat sera le suivant:
987654
987654
Commentaires
- Pourquoi un exemple C # pour une question Java?
- Ce que je pense exactement, je ne connais que la programmation Java et non C #, donc vous navez pas été dune grande aide
- @BasileStarynkevitch Je ' je suis principalement un développeur C # et comme le principe compte pour les deux et est aussi bon que le même, jai rapidement fourni un C # exemple, mal de moi bien sûr. 🙂 Jai changé mon exemple en Java.
- @SkylarAdams Désolé, jai supposé à tort trop rapidement que quiconque connaît Java connaît C #. Jai changé lexemple en Java, jespère que cela aide.
- Pour ce genre de question, je pense que ce nest pas pertinent, que ce soit en Java ou en C #,
Réponse
Il est expliqué ici (avec un exemple Bicycle
classe avec variable de classe numberOfBicycles
et variables dinstance cadence
, speed
, gear
& id
):
Parfois, vous souhaitez avoir des variables communes à tous les objets. Ceci est accompli 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à nimporte quel objet. Chaque instance de la classe partage une variable de classe, qui se trouve dans un emplacement fixe de la mémoire. Tout objet peut changer la valeur dune 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 lexemple, numberOfBicycles
est une variable de classe (puisquelle est déclarée static
). Il ny a quune seule de ces variables (cest-à-dire lemplacement) 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 différents objets Bicycle
)
En revanche, gear
& id
sont des variables instance (car leur déclaration na pas de modificateur static
). Chaque objet Bicycle
a le sien. Si vous modifiez gear
pour certains Bicycle
a , et si b est un autre exemple, la modification de a.gear
na aucun effet sur b.gear
Chaque objet Java est une zone mémoire distincte avec des métadonnées (par exemple, une référence à sa classe) et ses propres variables dinstance (peut-être héritées dune superclasse).Mais les variables de classe sont communes à la classe et partagées par toutes les instances.
Voir aussi Objet (informatique) & Variable dinstance wikipages.
Réponse
Variable dinstance:
- Les variables dinstance sont déclarées dans une classe, mais en dehors dune méthode, dun constructeur ou dun bloc.
- La variable dinstance appartient à linstance dune classe ou vous pouvez dire que la variable dinstance appartient à lobjet.
-
La variable dinstance a valeur distincte de chaque instance de la 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éthode daccès à la variable dinstance:
InstanceDemo demo = new InstanceDemo (); System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );
Résultat: 2, Test
Variable de classe:
- La variable de classe appartient à la classe.
- la variable de classe est créée en ajoutant un mot-clé «statique» avant la variable.
- Aussi appelée variable statique.
-
Et la variable de classe la plus importante conserve une valeur partagée unique pour toutes les instances dune classe, même si aucun objet dinstance de la classe nexiste.
Class ClassDemo { // count variable is Same for all instance of this class public static int count = 2; }
Méthode pour accéder à la variable de classe:
System.out.println("Access Class variable: " + ClassDemo.count ); //class variable is directly refer with class name
Sortie: 2
Brève différence entre la variable de classe et la variable dinstance:
- Les variables dinstance ont des valeurs distinctes pour chaque instance dune classe. Les variables de classe conservent une valeur partagée unique pour toutes les instances de la classe, même si aucun objet dinstance de cette classe nexiste.
- Vous utiliseriez le mot-clé static pour transformer une variable dinstance en variable de classe.
- Les variables dinstance et de classe sont déclarées au niveau de la classe, pas dans les méthodes.
Réponse
La différence entre les variables class variables
et instance
, est simplement une question de who knows what?
.
Un instance variable
nest connu que (= lié ) à cette instance concrète – doù le nom.
public class Person { private String firstName; private String lastName; [...] }
La définition dune classe est comme un plan pour construire des objets béton . Peut-être que ce point vous embrouille un peu. Mais en lécrivant de cette façon, chaque variable serait liée à son objet concret: par exemple Chaque personne a son propre prénom
Un class variable
en revanche est – comme son nom lindique – connu de chaque membre dune classe; ou techniquement: il est connu / lié au niveau de la classe . Lexemple typique est un compteur du nombre dobjets que vous avez créés – bien que ce soit un exemple très problématique; mais cela na pas dimportance à ce stade précoce.
public class Person { private String firstName; private String lastName; [...] static int numberOfPersons = 0 }
numberOfPersons
est déclaré static
qui est le mot-clé à distinguer entre class variables
et instance variabes
. La variable est déclarée comme les autres dans la définition de classe . Mais le mot clé static
indique quil est différent.
-
firstName
,lastName
sont des variables dinstance et liées à cette instance concrète -
numberOfPersons
est lié à la classe, de sorte que chaque instance puisse accéder à cette variable.
tl; dr
Lendroit où les variables sont définies est la définition de classe.
Les variables de classe sont connues / liées au niveau de la classe, cest-à-dire chaque béton instance y a accès. Pour définir une variable de classe, vous utilisez le mot-clé static
.
I Les variables dinstance ne sont connues quau niveau de linstance. Vous les définissez sans le mot clé static
.
Une documentation supplémentaire pour Java est ici
Laisser un commentaire