1. Constanten
Veel andere programmeertalen hebben constanten , dat wil zeggen variabelen waarvan de waarden niet kunnen worden gewijzigd . Meestal worden ze gebruikt voor iets fundamenteels, zoals het aantal Pi
of het aantal dagen in de maanden van het jaar. Dat gezegd hebbende, kan een programmeur in principe elke variabele tot een constante maken, als hij of zij besluit dat dit nodig is.
Dus hoe declareer je een onveranderlijke variabele (constante) in Java? Hier is een speciaal trefwoord voor: final
. Het maken van een onveranderlijke variabele ziet er hetzelfde uit als het maken van een gewone variabele. Het enige verschil is dat u vóór het type van de variabele het woord moet schrijven final
, zoals dit:
final Type name = value;
Als je probeert een andere waarde toe te kennen aan een final
variabele, dan wil je programma gewoon niet compileren.
Een final
variabele moet worden geïnitialiseerd (er moet een waarde aan worden toegekend) wanneer deze wordt gedeclareerd. Er is één uitzondering op deze regel: u kunt de initialisatie van een statische klassevariabele verplaatsen naar een constructor. Maar daarover leer je in Level 10 .
Om het aantal trefwoorden te verminderen, gebruiken Java-ontwikkelaars het woord final
voor meer dan alleen het declareren van constanten. final
kan ook van toepassing zijn op methoden en zelfs klassen. Methoden die zijn gedeclareerd als final
niet kunnen worden overschreven, en een klasse die is gedeclareerd als final
niet kunnen worden geërfd.
De final
modifier kan vóór variabelen worden toegevoegd: lokale variabelen, methodeparameters, klassevelden en statische klassevariabelen.
Merk op dat final
vóór een variabelenaam alleen bescherming is tegen eventuele wijzigingen aan die variabele . Als een variabele een verwijzing naar een object opslaat, kan het object nog steeds worden gewijzigd.
Voorbeeld:
|
We maken een array. Dit is niet toegestaan: de data variabele wordt gedeclareerd als final . Maar je kunt dit doen. En ook dit. |
Wereldwijde constanten
Als u besluit om globale constanten in uw programma te declareren, dan moet u statische klassevariabelen maken en deze public
en maken final
. Er is een speciale stijl voor de namen van dergelijke variabelen: ze worden allemaal in hoofdletters geschreven, met een onderstrepingsteken dat wordt gebruikt om woorden te scheiden.
Voorbeelden:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
2. Variabele schaduwwerking
Zoals we al eerder zeiden, kunt u met dezelfde methode niet meerdere lokale variabelen met dezelfde naam maken. Op verschillende manieren kan dat.
Maar dit is wat u waarschijnlijk niet weet: instantievariabelen en lokale methodevariabelen kunnen dezelfde naam hebben.
Voorbeeld:
Code | Variabele zichtbaarheid |
---|---|
|
|
In de add
methode hebben we een lokale variabele met de naam sum
. Tot het einde van de methode schaduwt (of maskeert ) het de sum
instantievariabele.
Oké, zeg je, dat is in zekere zin te verwachten. Maar dat is niet het einde van het verhaal. Het blijkt dat als een instantievariabele wordt overschaduwd door een lokale variabele, er nog steeds een manier is om naar de instantievariabele te verwijzen binnen de methode. Dit doen we door het this
trefwoord voor de naam te schrijven:
this.name
Hier is een voorbeeld waarbij het naamconflict met succes is opgelost:
Code | Variabele zichtbaarheid |
---|---|
|
|
De variabelen count
en sum
zijn overal beschikbaar met of zonder het this
trefwoord. Op regels waar de sum
lokale variabele de sum
instantievariabele in de schaduw stelt, sum
is de instantievariabele alleen toegankelijk met behulp van het this
trefwoord.
Als een statische klassevariabele in plaats van een instantievariabele wordt geschaduwd, moet u deze openen via de klassenaam in plaats van het this
trefwoord:
ClassName.name
Voorbeeld:
Code | Variabele zichtbaarheid |
---|---|
|
|
U hebt overal toegang tot de count
en sum
statische variabelen, met of zonder de klassenaam Solution
als voorvoegsel te gebruiken. In die regels waar de lokale variabele de instantievariabele sum
overschaduwt , is toegang tot de instantievariabele alleen mogelijk wanneer deze als voorvoegsel wordt gebruikt.sum
sum
Solution
3. Variabelen binnen een for
lus
En nog een klein maar interessant feit.
Er is ook een plaats waar een variabele op een speciale manier wordt gedeclareerd — binnen een for
lus .
U herinnert zich misschien dat een for
lus doorgaans een tellervariabele tussen haakjes heeft. En wat is de zichtbaarheid van deze variabele? Het zit tenslotte niet in de body van de lus. Is het de hele methode? Of niet?
Het juiste antwoord is: een variabele gedeclareerd in de header van een for
loop is alleen zichtbaar in de body van de loop en in de header van de for
loop .
Voorbeeld:
Code | Variabele zichtbaarheid |
---|---|
|
|
U kunt dus altijd loops achter elkaar in uw code schrijven en tellervariabelen met dezelfde naam gebruiken - dat levert geen problemen op.
Voorbeeld:
Code | Variabele zichtbaarheid |
---|---|
|
|