Champs statiques en Java

Il peut y avoir des moments où il est utile d'avoir des valeurs partagées entre toutes les instances d'une classe particulière. Les champs statiques et les constantes statiques permettent ce type de partage en appartenant à la classe et non aux objets réels.

Le modificateur statique

Normalement, les champs et méthodes définis dans une classe ne peuvent être utilisés que lorsqu'un objet de ce type de classe a été créé. Par exemple, considérons une classe Item simple qui assure le suivi des marchandises dans un magasin:

 élément de classe publique 

   chaîne privée itemName;

 

   Élément public (String itemName)

   

     this.itemName = itemName;

   

 

   public String getItemName ()

   

     return itemName;

   

  

Pour pouvoir utiliser la méthode getItemName (), nous devons d'abord créer un objet Item, dans ce cas, catFood:

 classe public StaticExample 

 

   public static void main (String [] args) 

     Article catFood = nouvel article ("Whiskas");

     System.out.println (catFood.getItemName ());

   

  

Cependant, si le modificateur statique est inclus dans une déclaration de champ ou de méthode, aucune instance de la classe n'est requise pour utiliser le champ ou la méthode - ils sont associés à la classe et non à un objet individuel. Si vous regardez l'exemple ci-dessus, vous verrez que le modificateur statique est déjà utilisé dans la déclaration de méthode principale:

 Publique statique void main (String [] args)  

La méthode principale est une méthode statique qui ne nécessite pas qu'un objet existe avant de pouvoir être appelé. Comme main () est le point de départ de toute application Java, il n'y a en fait aucun objet existant pour l'appeler. Vous pourriez, si vous aviez envie d'avoir un programme qui s'appelle continuellement, faire ceci:

 classe public StaticExample 

 

   public static void main (String [] args) 

 

     String [] s = "random", "string";

     StaticExample.main (s);

     

 

 

Pas très utile, mais remarquez comment la méthode main () peut être appelée sans une instance d'une classe StaticExample.

Qu'est-ce qu'un champ statique?

Les champs statiques sont également appelés champs de classe. Ce sont simplement des champs qui ont le modificateur statique dans leurs déclarations. Par exemple, revenons à la classe Item et ajoutons un champ statique:

 élément de classe publique 

 

   // champ statique uniqueId

   private static int uniqueId = 1;

 

   private int itemId;

   chaîne privée itemName;

 

   Élément public (String itemName)

   

     this.itemName = itemName;

     itemId = uniqueId;

     uniqueId ++;

   

 

 

Les champs itemId et itemName sont des champs non statiques normaux. Lorsqu'une instance d'une classe Item est créée, ces champs auront des valeurs qui sont conservées à l'intérieur de cet objet. Si un autre objet Item est créé, il aura également des champs itemId et itemName pour stocker les valeurs.

Le champ statique uniqueId, cependant, contient une valeur qui sera la même pour tous les objets Item. S'il y a 100 objets Item, il y aura 100 instances des champs itemId et itemName, mais un seul champ statique uniqueId.

Dans l'exemple ci-dessus, uniqueId est utilisé pour donner à chaque objet Item un numéro unique. Cela est facile à faire si chaque objet Item créé prend la valeur actuelle dans le champ statique uniqueId, puis l'incrémente d'une unité. L'utilisation d'un champ statique signifie que chaque objet n'a pas besoin de connaître les autres objets pour obtenir un identifiant unique. Cela peut être utile si vous souhaitez connaître l'ordre dans lequel les objets Item ont été créés.

Qu'est-ce qu'une constante statique?

Les constantes statiques sont exactement comme les champs statiques, sauf que leurs valeurs ne peuvent pas être modifiées. Dans la déclaration de champ, le final et statique les modificateurs sont tous deux utilisés. Par exemple, la classe Item devrait peut-être imposer une restriction sur la longueur de itemName. Nous pourrions créer une constante statique maxItemNameLength:

 élément de classe publique 

 

   int statique privé id = 1;

   public static final int maxItemNameLength = 20;

 

   private int itemId;

   chaîne privée itemName;

 

   Élément public (String itemName) 

   

     if (itemName.length ()> maxItemNameLength)

     

       this.itemName = itemName.substring (0,20);

     

     autre

     

       this.itemName = itemName;

     

     itemId = id;

     id ++;

    

Comme pour les champs statiques, les constantes statiques sont associées à la classe plutôt qu'à un objet individuel:

 classe public StaticExample 

 

   public static void main (String [] args) 

 

     Article catFood = nouvel article ("Whiskas");

     System.out.println (catFood.getItemName ());

     System.out.println (Item.maxItemNameLength);

     

 

 

Il y a deux choses importantes à noter à propos de la constante statique maxItemNameLength:

  • Il est déclaré comme domaine public. En général, c'est une mauvaise idée de rendre un champ public dans n'importe quelle classe que vous concevez, mais dans ce cas, cela n'a pas d'importance. La valeur de la constante ne peut pas être modifiée.
  • La constante statique est utilisée à partir du nom de classe Item, pas d'un objet Item.

Les constantes statiques sont visibles dans toute l'API Java. Par exemple, la classe wrapper d'entier en a deux qui stockent les valeurs maximale et minimale qu'un type de données int peut avoir:

 System.out.println ("La valeur maximale pour int est:" + Integer.MAX_VALUE);

 System.out.println ("La valeur minimale pour int est:" + Integer.MIN_VALUE);

 

 Production:

 La valeur maximale pour int est: 2147483647

 La valeur min pour int est: -2147483648