Variabele reikwijdte in Java

1. Overzicht

In Java, zoals in elke programmeertaal, heeft elke variabele een bereik. Dit is het segment van het programma waar een variabele kan worden gebruikt en die geldig is.

In deze tutorial introduceren we de beschikbare scopes in Java en bespreken we de verschillen daartussen.

2. Klassenomvang

Elke variabele gedeclareerd tussen haakjes van een klasse ( {} ) met privaat toegangsmodificator, maar buiten elke methode, heeft klassebereik. Als resultaat, deze variabelen kunnen overal in de klas worden gebruikt, maar niet daarbuiten:

openbare klasse ClassScopeExample {privé Geheel getal bedrag = 0; public void exampleMethod () {bedrag ++; } public void anotherExampleMethod () {Geheel getal anotherAmount = bedrag + 4; }}

Dat kunnen we zien ClassScopeExample heeft een klassenvariabele bedrag waartoe toegang kan worden verkregen binnen de methoden van de klasse.

Als we geen gebruik maken van privaat, zal het toegankelijk zijn vanuit het hele pakket. Bekijk het artikel over toegangsmodificatoren voor meer informatie.

3. Werkingssfeer van de methode

Wanneer een variabele binnen een methode wordt gedeclareerd, heeft deze een methodebereik en het is alleen geldig binnen dezelfde methode:

openbare klasse MethodScopeExample {openbare ongeldige methodA () {Geheel getal gebied = 2; } public void methodB () {// compilatiefout, gebied kan niet worden omgezet in een variabel gebied = gebied + 2; }}

In methode A.hebben we een methodevariabele gemaakt met de naam Oppervlakte. Om die reden kunnen we gebruiken Oppervlakte binnen methode A., maar we kunnen het nergens anders gebruiken.

4. Loopbereik

Als we een variabele binnen een lus declareren, heeft deze een lusbereik en zal alleen beschikbaar zijn binnen de lus:

openbare klasse LoopScopeExample {List listOfNames = Arrays.asList ("Joe", "Susan", "Pattrick"); public void iterationOfNames () {String allNames = ""; voor (String naam: listOfNames) {allNames = allNames + "" + naam; } // compilatiefout, naam kan niet worden omgezet in een variabele String lastNameUsed = naam; }}

We kunnen die methode zien iterationOfNames heeft een methodevariabele genaamd naam. Deze variabele kan alleen binnen de lus worden gebruikt en is niet geldig daarbuiten.

5. Beugelbereik

We kunnen overal extra scopes definiëren met behulp van haakjes ({}):

openbare klasse BracketScopeExample {public void mathOperationExample () {Integer sum = 0; {Geheel getal = 2; som = som + getal; } // compilatiefout, nummer kan niet worden opgelost als een variabel nummer ++; }}

De variabele aantal is alleen geldig tussen haakjes.

6. Bereik en variabele schaduwen

Stel je voor dat we een klassevariabele hebben, en we willen een methodevariabele met dezelfde naam declareren:

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

De eerste keer dat we printen titel, zal het "Baeldung" drukken. Declareer daarna een methodevariabele met dezelfde naam en wijs er de waarde “John Doe“.

De variabele titelmethode heft de mogelijkheid op om toegang te krijgen tot het klasse variabele titel opnieuw. Daarom staat er de tweede keer "John Doe.

Verwarrend, toch? Dit heet variabele schaduwen en is geen goede gewoonte. Het is beter om het voorvoegsel te gebruiken dit om toegang te krijgen tot het titel class variabele, zoals this.title.

7. Conclusie

We hebben de verschillende scopes geleerd die in Java bestaan.

Zoals altijd is de code beschikbaar op GitHub.