La différence entre class variableset instancevariables, est simplement une question de who knows what?.
Un instance variableest uniquement connu (= lié ) à cette instance concrète - d'où le nom.
public class Person {
private String firstName;
private String lastName;
[...]
}
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.
public class Person {
private String firstName;
private String lastName;
[...]
static int numberOfPersons = 0
}
numberOfPersonsest déclaré, staticqui est le mot clé pour distinguer entre class variableset instance variabes. La variable est déclarée comme les autres dans la définition de classe. Mais le staticmot - clé signale qu'il est différent.
firstName, lastNamesont des variables d'instance et liées à cette instance concrète
numberOfPersons 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 staticmot clé.
La documentation supplémentaire pour Java est ici