Chargement...

Portée en Java

Écrivez une méthode nommée mark avec un paramètre : static void mark(int n). Dans les accolades, affichez ce paramètre avec System.out.println(n);. Depuis main, appelez mark(4);. L'écran doit montrer une ligne : 4. Le nom n n'existe qu'à l'intérieur de mark. Si vous essayez d'afficher n depuis main, javac refuse. Cette frontière — quels noms une méthode peut voir — est ce que cette page enseigne.

Des noms qui restent dans une méthode

Sur la page de surcharge, plusieurs méthodes paint partageaient un nom mais gardaient des listes de paramètres séparées. Ici le focus est plus petit : une méthode, un nom de paramètre, et où ce nom a le droit d'apparaître. Un paramètre est un nom qui appartient à la méthode qui le déclare. Hors des accolades de cette méthode, le nom a disparu.
Créez un petit fichier programme nommé Gate.java. Le public class de la première ligne doit correspondre au nom du fichier : public class Gate. Ne laissez pas un ancien nom de classe Sign ou Box dans ce fichier ; le compilateur attend que le nom de classe et le nom de fichier concordent.
Hors de main, toujours dans les accolades de la classe, écrivez static void mark(int n). Le corps a un affichage : System.out.println(n);. Sur cette page gardez void. Vous observez la visibilité, pas les valeurs de retour. Enregistrez le fichier avant de compiler. Le premier programme complet est dans la boîte suivante.

Gate.java avec mark

C'est la version que vous compilez d'abord. main contient l'appel. mark contient l'affichage qui utilise n.

mark prints its parameter

java
public class Gate {
    public static void main(String[] args) {
        mark(4);
    }

    static void mark(int n) {
        System.out.println(n);
    }
}

Depuis le dossier qui contient Gate.java, exécutez javac Gate.java. Quand parenthèses, accolades et points-virgules concordent, javac n'écrit aucune ligne de son côté. Puis exécutez java Gate — pas java Gate.java. Enlevez la fin .java de la seconde commande. Les deux mêmes commandes fonctionnent sous Windows et sous macOS. Le programme doit afficher une ligne et s'arrêter : 4. Il ne doit pas attendre une saisie. Si le terminal attend le clavier, un appel nextLine d'un ancien exercice est encore dans le fichier. Supprimez-le et gardez mark(4); plus la méthode mark ci-dessus.
Parcourez l'exécution une fois dans l'ordre. Java commence à main. L'appel mark(4) envoie 4 dans le paramètre n. Dans mark, println(n) écrit 4. Quand mark se termine, le nom n se termine aussi. main n'a jamais eu de nom n. Le nombre 4 a traversé l'appel comme valeur. Le nom n n'est pas passé dans main.
Si vous ajoutez System.out.println(n); dans main après l'appel, javac signale qu'il ne trouve pas le symbole n. Cette erreur est la leçon : n n'a jamais été déclaré dans main. Corrigez en retirant cette ligne de main, ou déclarez un autre nom dans main si vous avez besoin d'un local. N'attendez pas que le paramètre de mark apparaisse tout seul dans main.

Un nom local à côté du paramètre

Dans mark vous pouvez aussi déclarer un nouveau nom qui n'est pas un paramètre. Ce nom local ne vit qu'entre les accolades de mark. Changez le corps pour stocker une étiquette et afficher l'étiquette et n sur une ligne, ou gardez une seconde méthode courte pour la démo — sur cette page la boîte suivante montre plutôt le passage d'un nom depuis main, le chemin habituel du débutant.
Un espoir fréquent du débutant est qu'un nom déclaré dans main soit automatiquement visible dans chaque méthode de la classe. Sur cette forme, ce n'est pas le cas. Si main a int room = 4; et que mark essaie d'afficher room sans le recevoir, javac ne trouve pas room dans mark. La solution est de passer la valeur : mark(room); avec mark toujours déclaré mark(int n).

Passer un local de main à mark

Déclarez int room = 4; dans main. Appelez mark(room);. Dans mark, continuez d'afficher n. L'écran montre encore 4. Le nom local dans main est room. Le nom du paramètre dans mark est n. Ce sont des noms différents à des endroits différents. La valeur 4 est ce qui voyage.

pass room into mark

java
public class Gate {
    public static void main(String[] args) {
        int room = 4;
        mark(room);
    }

    static void mark(int n) {
        System.out.println(n);
    }
}

Compilez et exécutez à nouveau : javac Gate.java, puis java Gate. Vous voyez encore une ligne : 4. Si vous changez room en 9 et laissez le corps de la méthode, l'écran montre 9. La méthode affiche toujours la valeur arrivée dans n. main peut aussi afficher room si vous ajoutez System.out.println(room); dans main — ce nom lui appartient. main ne peut toujours pas afficher n.
Si mark déclare son propre local — par exemple int tag = 1; dans les accolades — ce tag est invisible pour main. Essayer System.out.println(tag); dans main échoue pour la même raison que l'affichage de n depuis main. Les accolades de mark sont un mur pour les noms déclarés à l'intérieur.

Ce que protège le mur

Lisez la séparation en mots simples. Les noms déclarés dans main restent dans main sauf si vous passez leurs valeurs dans un appel. Les noms déclarés dans mark — paramètres et locaux — restent dans mark. L'appel transporte des valeurs, pas les noms eux-mêmes. La surcharge de la page précédente est une autre compétence : plusieurs méthodes avec un même nom de méthode. La portée concerne l'endroit où un nom de variable ou de paramètre peut apparaître dans le source.
Une démo Sign restante avec plusieurs méthodes paint peut rester dans le même fichier et brouiller l'écran si main appelle encore paint("ok"). Réduisez main à l'appel mark que vous testez. N'imbriquez pas mark dans les accolades de main. Les méthodes sont dans la classe, à côté de main.
Écrire System.out.println("n"); dans main affiche la lettre n entre guillemets. Cela n'affiche pas le paramètre. Gardez println(n) dans mark quand vous voulez la valeur arrivée par l'appel. Écrire mark(); avec des parenthèses vides échoue si l'en-tête dit encore mark(int n) — l'appel doit envoyer un int, qu'il s'agisse d'un littéral comme 4 ou d'un local comme room.

Avant recursion

Vous pouvez écrire mark(int n), afficher n dans cette méthode, et garder n hors de main. Vous pouvez déclarer room dans main et passer room à mark. L'écran montre la valeur qui a traversé l'appel. Les noms ne fuient pas tout seuls à travers les accolades. La page suivante est recursion, où une méthode s'appelle elle-même avec un argument plus petit jusqu'à ce qu'une condition d'arrêt termine la chaîne.

🧠 Testez Vos Connaissances

Prêt à Commencer

Testez Vos Connaissances

Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet

❓
6
Questions
🎯
70%
Pour Réussir
♾️
∞
Temps
🔄
∞
Tentatives

📝 Instructions

  • Lisez chaque question attentivement
  • Sélectionnez la meilleure réponse pour chaque question
  • Vous pouvez refaire le quiz autant de fois que vous le souhaitez
  • Votre progression sera affichée en haut