Vous avez appris que les variables locales sont déclarées à l’intérieur d’un bloc de code. La compréhension de la portée des variables Java est essentielle pour écrire du code fiable et maintenable. Voyons combien de variables sont dans la portée de cette méthode :
public void manger(int morceauxFromage) {
int bouchesFromage = 1;
}
Il y a deux variables avec une portée locale. La variable bouchesFromage
est déclarée à l’intérieur de la méthode. La variable morceauxFromage
est un paramètre de méthode. Aucune de ces variables ne peut être utilisée en dehors de leur zone de définition.
Limitation de la Portée des Variables
Les variables locales ne peuvent jamais avoir une portée plus grande que la méthode dans laquelle elles sont définies. Cependant, elles peuvent avoir une portée plus restreinte. Considérez cet exemple :
public void mangerSiFaim(boolean aFaim) {
if (aFaim) {
int bouchesFromage = 1;
} // bouchesFromage sort de la portée ici
System.out.println(bouchesFromage); // NE COMPILE PAS
}
La variable aFaim
a une portée qui s’étend sur toute la méthode, tandis que la variable bouchesFromage
a une portée plus restreinte. Elle n’est disponible que dans le bloc if car elle y est déclarée. Lorsque vous voyez des accolades ({}) dans le code, cela signifie que vous êtes entré dans un nouveau bloc de code. Chaque bloc de code a sa propre portée.
Gestion des Blocs Imbriqués
Rappelons que les blocs peuvent contenir d’autres blocs. Ces blocs plus petits peuvent faire référence aux variables définies dans les blocs de portée plus large, mais pas l’inverse. Voici un exemple :
public void mangerSiFaim(boolean aFaim) {
if (aFaim) {
int bouchesFromage = 1;
{
var petiteBouchee = true;
System.out.println(bouchesFromage);
}
}
System.out.println(petiteBouchee); // NE COMPILE PAS
}
La variable bouchesFromage
reste en portée jusqu’à la fin du bloc if. C’est pourquoi nous pouvons l’utiliser sans problème dans le bloc plus petit (entre les accolades intérieures). En revanche, la variable petiteBouchee
sort de portée dès la fin de son propre bloc, celui où elle a été déclarée. C’est la raison pour laquelle tenter de l’utiliser après ce bloc génère une erreur de compilation.
Suivi de la Portée des Variables
Voyons maintenant un exemple plus complexe qui vous aidera à maîtriser la portée des variables en Java. Ne vous inquiétez pas si vous n’êtes pas encore familier avec les instructions if
ou les boucles while
. Ce qui nous intéresse ici, c’est la portée des variables. Essayez de déterminer à quelle ligne chacune des cinq variables locales entre et sort de la portée :
public void mangerPlus(boolean aFaim, int quantiteNourriture) {
int capaciteEstomac = 5;
if (aFaim) {
var tempsRepas = true;
while (quantiteNourriture > 0) {
int quantiteMangee = 2;
capaciteEstomac = capaciteEstomac - quantiteMangee;
quantiteNourriture = quantiteNourriture - quantiteMangee;
} #1
} #2
System.out.println(quantiteNourriture);
} #3
Cette méthode compile correctement. La première étape pour comprendre la portée est d’identifier les blocs de code. Dans ce cas, il y a trois blocs, comme en témoignent les trois paires d’accolades. En commençant par l’ensemble le plus interne, nous pouvons voir où le bloc de la boucle while commence et se termine.
Bloc | Première ligne du bloc | Dernière ligne du bloc |
---|---|---|
while | while (quantiteNourriture > 0) | } #1 |
if | if (aFaim) | } #2 |
Méthode | public void mangerPlus | } #3 |
Analyse de la Portée des Variables
Maintenant que nous avons identifié les blocs, examinons la portée de chaque variable :
aFaim
etquantiteNourriture
sont des paramètres de méthode, donc disponibles dans toute la méthodecapaciteEstomac
entre en portée à sa déclaration et reste disponible jusqu’à la fin de la méthodetempsRepas
entre en portée dans le bloc if et en sort à la fin de ce blocquantiteMangee
entre en portée dans le bloc while et en sort à la fin de ce bloc
Application de la Portée aux Classes
Passons maintenant aux règles de portée pour les variables d’instance et de classe. La bonne nouvelle est que ces règles sont plus simples ! Les variables d’instance sont disponibles dès leur définition et le restent pendant toute la durée de vie de l’objet. Pour les variables de classe (marquées static
), c’est encore plus simple : elles entrent en portée à leur déclaration et y restent pendant toute la durée d’exécution du programme.
Prenons un dernier exemple pour bien comprendre. Essayez d’identifier le type des quatre variables et leur portée :
public class Souris {
final static int TAILLE_MAX = 5;
int taille;
public void grandir(int centimetres) {
if (taille < TAILLE_MAX) {
int nouvelleTaille = taille + centimetres;
taille = nouvelleTaille;
}
}
}
Analyse des Variables de la Classe Souris
Dans cette classe, nous avons :
- Une variable de classe :
TAILLE_MAX
- Une variable d’instance :
taille
- Deux variables locales :
centimetres
etnouvelleTaille
Résumé des Règles de Portée
Pour conclure, voici les règles essentielles de la portée des variables en Java :
- Variables locales : En portée depuis leur déclaration jusqu’à la fin du bloc
- Paramètres de méthode : En portée pendant toute la durée de la méthode
- Variables d’instance : En portée depuis leur déclaration jusqu’à ce que l’objet soit éligible pour le ramasse-miettes
- Variables de classe : En portée depuis leur déclaration jusqu’à la fin du programme