1. Variables statiques
Lorsqu'une classe est chargée en mémoire, un objet statique est immédiatement créé. Cet objet stocke des variables de classe statiques (champs de classe statiques). L'objet statique existe même si aucun objet ordinaire (non statique) de la classe n'a été créé.
Lorsque nous déclarons des variables dans une classe, nous indiquons si elles seront créées une seule fois ou s'il doit y avoir des instances distinctes de ces variables dans chaque objet. Par défaut, une nouvelle copie de chaque variable est créée pour chaque objet.
Une variable statique est liée à l'objet statique de la classe et il y a toujours une seule instance de celle-ci.
Pour créer une variable statique dans une classe, vous devez écrire le static
mot-clé avant son nom. Le format général pour déclarer une variable statique est :
static Type name = value;
Si une variable statique ne se voit pas attribuer de valeur initiale, elle est initialisée avec une valeur par défaut :
Taper | Valeur par défaut |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
(la même chose que
) |
|
|
et tous les cours |
|
Exemples:
Code | Note |
---|---|
|
|
|
|
|
|
|
|
|
A l'intérieur d'une classe, vous pouvez faire référence à ses variables statiques simplement en utilisant leurs noms. Mais pour y accéder depuis une autre classe, il faut écrire le nom de la classe avant le nom de la variable statique.
ClassName.variable
Exemple:
Variable | Classe | Accéder à une variable hors de sa classe |
---|---|---|
|
|
|
|
|
|
|
|
La variable est private . Il n'est pas visible à l'extérieur de la classe. |
|
|
La variable est private . Il n'est pas visible à l'extérieur de la classe. |
|
|
La variable est private . Il n'est pas visible à l'extérieur de la classe. |
2. Différence entre les variables statiques et non statiques
Les variables non statiques (ordinaires) d'une classe sont déclarées de la même manière que les variables statiques, mais sans le static
mot-clé.
Quelle est la différence entre les variables ordinaires et les variables statiques ?
Les variables ordinaires d'une classe sont liées aux objets de la classe (instances de la classe), tandis que les variables statiques sont liées à l'objet statique de la classe.
S'il existe plusieurs instances d'une classe, chacune d'elles possède sa propre copie des variables non statiques (ordinaires). Les variables statiques d'une classe sont toujours stockées dans son objet statique et il n'en existe qu'une seule instance.
Vous ne pouvez accéder aux variables ordinaires (champs) d'une classe que si vous avez une référence à un objet de la classe. Et à l'intérieur des méthodes de la classe, bien sûr.
Exemple:
Accéder à un champ d'une classe à l'aide d'une référence d'objet |
---|
|
Vous pouvez accéder aux variables statiques de n'importe où (après prise en compte des modificateurs de visibilité) : depuis les méthodes ordinaires, depuis les méthodes statiques de la même classe, depuis les méthodes d'autres classes, etc.
Exemple:
Accéder à un champ statique d'une classe sans utiliser de référence d'objet |
---|
|
Comment la mémoire est organisée :
Disons que nous avons une Person
classe avec 4 champs : deux sont statiques et deux ne le sont pas.
public class Person
{
public static int count = 0;
public static int sum = 0;
public int age = 0;
public String name;
}
Immédiatement après le chargement de la classe
Lorsque la machine Java a fini de charger la Person
classe, la mémoire ressemblera à ceci :
Après avoir créé le premier objet
Si nous créons un Person
objet, alors l'image devient ceci :
Veuillez noter que bien que les deux objets aient deux variables, ce sont des variables différentes : les objets ordinaires ont des variables ordinaires et l'objet statique a les variables statiques.
Nous avons besoin de plus d'objets
Créons deux autres Person
objets. Maintenant, la mémoire ressemblera à ceci :
Veuillez noter que chaque objet a ses propres variables d'âge et de nom.
3. Supprimer et ajouter le static
modificateur
Du statique à l'ordinaire
Que se passe-t-il si nous prenons une variable statique et la transformons en une variable ordinaire en supprimant son static
modificateur ? Par exemple, la static int sum
variable.
Le code modifié ressemblera à ceci :
public class Person
{
public static int count = 0;
public int sum = 0;
public int age = 0;
public String name;
}
Maintenant, la mémoire ressemble à ceci :
La variable statique a disparu de l'objet statique, et maintenant chaque objet ordinaire a sa propre sum
variable.
De l'ordinaire au statique
On peut faire l'inverse : ajouter le static
modificateur aux variables ordinaires d'une classe. Ils disparaîtront de tous les objets ordinaires et apparaîtront dans l'objet statique. Supposons que nous décidions de rendre les variables age
et name
statiques. Ensuite, le code ressemblera à ceci :
public class Person
{
public static int count = 0;
public int sum = 0;
public static int age = 0;
public static String name;
}
Et maintenant, la mémoire ressemblera à ceci :
GO TO FULL VERSION