Je suis très nouveau 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 ici sont des variables de classe et quelles sont les variables d'instance? Comment cela affecte-t-il la portée?
Réponses:
Ils sont tous 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 d'instance:
Ces variables appartiennent à l' instance d'une classe , donc d'un objet. Et chaque instance de cette classe (objet) a sa propre copie de cette variable. Les modifications apportées à la variable ne se reflètent pas dans les autres instances de cette classe.
Variables de classe:
Celles-ci sont également connues sous le nom de 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 des modifications.
Exemple complet:
La sortie sera:
Maintenant, changez la variable d'instance en variable de classe en la rendant statique:
J'ai utilisé des méthodes non statiques pour obtenir et définir la valeur de
Barcode
pour pouvoir l'appeler depuis l'objet et non depuis la classe. La sortie sera la suivante:la source
Il est expliqué ici (avec un exemple de
Bicycle
classe avec variables de classe desnumberOfBicycles
variables et d' instancecadence
,speed
,gear
&id
):Une variable de classe (déclarée
static
) est un emplacement commun à toutes les instances.Dans l'exemple,
numberOfBicycles
est une variable de classe (car elle est déclaréestatic
). Il n'y a qu'une seule variable (c'est-à-dire l'emplacement) commune à toutes les instances et à la classe. Donc, si vous modifieznumberOfBicycles
une méthode, d'autres méthodes verront la nouvelle valeur (même pour différentsBicycle
objets)En revanche,
gear
&id
sont des variables d' instance (car leur déclaration n'a pas destatic
modificateur). ChaqueBicycle
objet en possède un. Si vous modifiezgear
pour certainsBicycle
a , et si b est une autre instance, la modificationa.gear
n'a aucun effet surb.gear
Chaque objet Java est une zone de mémoire distincte avec quelques métadonnées (par exemple une référence à sa classe) et ses propres variables d'instance (peut-être héritées d'une superclasse). Mais les variables de classe sont communes à la classe et partagées par toutes les instances.
Voir aussi les wikipages d' objets (informatique) et de variables d'instance .
la source
Variable d'instance:
La variable d'instance a une valeur distincte pour chaque instance de la classe.
Variable de classe:
Et la variable de classe la plus importante conserve une valeur partagée unique pour toutes les instances d'une classe, même si aucun objet instance de la classe n'existe.
Brève différence entre la variable de classe et la variable d'instance:
la source
La différence entre
class variables
etinstance
variables, est simplement une question dewho knows what?
.Un
instance variable
est uniquement connu (= lié ) à cette instance concrète - d'où le nom.La définition d'une classe est comme un modèle de construction d' objets en béton . Peut-être que ce point vous déroute 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
A
class variable
, d'autre part - comme son nom l'indique - connu de chaque membre d'une classe; ou techniquement: il est connu / lié au niveau de la classe . L'exemple typique est un compteur du nombre d'objets que vous avez créés - bien que ce soit un exemple très problématique; mais cela n'a pas d'importance à ce stade précoce.numberOfPersons
est déclaré,static
qui est le mot clé pour distinguer entreclass variables
etinstance variabes
. La variable est déclarée comme les autres dans la définition de classe. Mais lestatic
mot - clé signale qu'il est différent.firstName
,lastName
sont des variables d'instance et liées à cette instance concrètenumberOfPersons
est lié à la classe, afin que chaque instance puisse accéder à cette variable.tl; dr
L'endroit où les variables sont définies est la définition de classe.
Les variables de classe sont connues au niveau de la classe / liées, c'est-à-dire que chaque instance concrète y a accès. Pour définir une variable de classe, vous utilisez le mot-clé
static
.Les variables d'instance ne sont connues qu'au niveau d'une instance. Vous les définissez sans le
static
mot clé.La documentation supplémentaire pour Java est ici
la source