Portée variable en Java

1. Vue d'ensemble

En Java, comme dans tout langage de programmation, chaque variable a une portée. C'est le segment du programme où une variable peut être utilisée et est valide.

Dans ce didacticiel, nous présenterons les étendues disponibles en Java et discuterons des différences entre elles.

2. Portée de la classe

Chaque variable déclarée à l'intérieur des crochets d'une classe ( {} ) avec un modificateur d'accès privé mais en dehors de toute méthode, a une portée de classe. En conséquence, ces variables peuvent être utilisées partout dans la classe, mais pas en dehors :

public class ClassScopeExample { private Integer amount = 0; public void exampleMethod() { amount++; } public void anotherExampleMethod() { Integer anotherAmount = amount + 4; } }

Nous pouvons voir que ClassScopeExample a un montant de variable de classe accessible dans les méthodes de la classe.

Si nous n'utilisons pas private , il sera accessible depuis l'ensemble du package. Consultez l'article sur les modificateurs d'accès pour plus d'informations.

3. Portée de la méthode

Lorsqu'une variable est déclarée dans une méthode, elle a une portée de méthode et elle ne sera valide que dans la même méthode:

public class MethodScopeExample { public void methodA() { Integer area = 2; } public void methodB() { // compiler error, area cannot be resolved to a variable area = area + 2; } }

Dans methodA , nous avons créé une variable de méthode appelée area . Pour cette raison, nous pouvons utiliser la zone à l' intérieur de la méthode A , mais nous ne pouvons l'utiliser nulle part ailleurs.

4. Portée de la boucle

Si nous déclarons une variable à l'intérieur d'une boucle, elle aura une portée de boucle et ne sera disponible qu'à l'intérieur de la boucle:

public class LoopScopeExample { List listOfNames = Arrays.asList("Joe", "Susan", "Pattrick"); public void iterationOfNames() { String allNames = ""; for (String name : listOfNames) { allNames = allNames + " " + name; } // compiler error, name cannot be resolved to a variable String lastNameUsed = name; } }

Nous pouvons voir que la méthode iterationOfNames a une variable de méthode appelée name . Cette variable ne peut être utilisée qu'à l'intérieur de la boucle et n'est pas valide en dehors de celle-ci.

5. Portée du support

Nous pouvons définir des portées supplémentaires n'importe où en utilisant des crochets ( {} ):

public class BracketScopeExample { public void mathOperationExample() { Integer sum = 0; { Integer number = 2; sum = sum + number; } // compiler error, number cannot be solved as a variable number++; } }

Le numéro de variable n'est valide que dans les parenthèses.

6. Scopes et ombrage variable

Imaginons que nous ayons une variable de classe, et que nous voulions déclarer une variable de méthode avec le même nom:

public class NestedScopesExample { String title = "Baeldung"; public void printTitle() { System.out.println(title); String title = "John Doe"; System.out.println(title); } }

La première fois que nous imprimons le titre , il imprimera «Baeldung». Ensuite, déclarez une variable de méthode avec le même nom et attribuez-lui la valeur «John Doe ».

La variable de méthode title remplace la possibilité d'accéder à nouveau à la variable de classe title . C'est pourquoi la deuxième fois, il imprimera «John Doe » .

Confus, non? C'est ce qu'on appelle l' observation variable et n'est pas une bonne pratique. Il est préférable d'utiliser le préfixe this afin d'accéder à la variable de classe de titre , comme this.title .

7. Conclusion

Nous avons appris les différentes étendues qui existent en Java.

Comme toujours, le code est disponible sur GitHub.