« Coucou, mon élève préféré. Je vais te parler de la visibilité des variables. »

« Hein ? Tu veux dire que les variables peuvent être invisibles ? »

« Pas exactement. La 'visibilité', ou portée d'une variable, signifie les emplacements de code à partir desquels tu peux faire référence à cette variable. Tu peux utiliser certaines variables partout dans le programme, mais d'autres ne peuvent être utilisées que dans leur propre classe ; d'autres, encore, dans une seule méthode. »

« Par exemple, tu ne peux pas utiliser une variable avant qu'elle ait été déclarée. »

« Ça me paraît logique. »

« Voici quelques exemples : »


public class Variables

{
   private static String TEXT = "The end.";
  ┗━━━━━━━━━━━━━━┛
   public static void main (String[] args)
                          ┗━━━━━━━┛
  {
     System.out.println("Hi");
     String s = "Hi!";
   ┏┗━━━━┛
    System.out.println(s);
    if (args != NULL)
    {
       String s2 = s;
      ┗━━━━┛
   
      System.out.println(s2);
     
    }
    Variables variables = new Variables();
    System.out.println(variables.instanceVariable);
    System.out.println(TEXT);
   
  }
 
   public String instanceVariable;
  ┗━━━━━━━━━━━━━━━┛
   public Variables()
   {
      instanceVariable = "Instance variable test.";
   }
}

1. Une variable déclarée dans une méthode existe (est visible) de sa déclaration à la fin de la méthode.

2. Une variable déclarée dans un bloc de code existe jusqu'à la fin du bloc de code.

3. Les paramètres d'une méthode existent partout dans la méthode.

4. Les variables dans un objet existent pendant la durée de vie entière de l'objet qui les contient. Leur visibilité est également définie par des modificateurs d'accès spéciaux : public et private.

5. Les variables static (de classe) existent pendant toute l'exécution du programme. Leur visibilité est également définie par les modificateurs d'accès.

« J'adore les images. Grâce à elles, tout est si clair. »

« Bien dit, Amigo. J'ai toujours sur que tu étais un petit bonhomme malin. »

« Je vais aussi te parler des 'modificateurs d'accès'. N'aie pas peur. Ce n'est rien de très compliqué. Ici, tu peux voir les mots public et private. »

« Je n'ai pas peur. C'est juste mon tic à l'œil. »

« Évidemment. Tu peux gérer la façon dont les méthodes et les variables d'une classe sont accessibles pour (ou visibles depuis) les autres classes. Tu peux affecter un seul modificateur d'accès à chaque méthode ou variable.

1. Le modificateur d'accès public.

Tu peux utiliser une variable, une méthode ou une classe marquée avec le modificateur public depuis n'importe où dans le programme. C'est le plus haut niveau d'accès : aucune limitation ici.

2. Le modificateur d'accès private.

Tu peux utiliser une variable ou une méthode marquée avec le modificateur private uniquement depuis la classe dans laquelle elle est déclarée. Pour toutes les autres classes, la méthode ou variable marquée sera invisible, comme si elle n'existait pas. C'est le niveau de proximité le plus élevé : l'accès est uniquement possible depuis sa propre classe.

3. Aucun modificateur.

Si une variable ou une méthode n'est pas marquée avec un modificateur, elle est considérée comme marquée avec un modificateur d'accès 'par défaut'. Ces variables et méthodes sont visibles pour toutes les classes dans le package dans lequel elles sont déclarées. Et uniquement pour ces classes. Ce niveau d'accès est parfois appelé 'package-private', car l'accès aux variables et méthodes est ouvert pour l'ensemble du package qui contient leur classe.

Voici un tableau qui résume ce dont nous venons de discuter : »

Modificateurs Accès depuis...
Sa propre classe Son propre package Une classe quelconque
private Oui Non Non
Pas de modificateur (package-private) Oui Oui Non
public Oui Oui Oui