1. Konstanter
Mange andre programmeringssprog har konstanter , det vil sige variabler, hvis værdier ikke kan ændres . Normalt bruges de til en slags grundlæggende ting, såsom antallet Pi
eller antallet af dage i årets måneder. Når det er sagt, i princippet kan en programmør gøre enhver variabel til en konstant, hvis han eller hun beslutter, at det er nødvendigt.
Så hvordan erklærer du en uforanderlig variabel (konstant) i Java? Der er et særligt søgeord for dette: final
. Oprettelse af en uforanderlig variabel ser det samme ud som at oprette en almindelig variabel. Den eneste forskel er, at før variablens type skal du skrive ordet final
, sådan her:
final Type name = value;
Hvis du prøver at tildele en anden værdi til en final
variabel, vil dit program simpelthen ikke kompilere.
En final
variabel skal initialiseres (der skal tildeles en værdi), når den erklæres. Der er en undtagelse fra denne regel: du kan flytte initialisering af en statisk klassevariabel ind i en konstruktør. Men du lærer om dette på niveau 10 .
For at reducere antallet af søgeord bruger Java-udviklere ordet final
til mere end blot at erklære konstanter. final
kan også gælde for metoder og endda klasser. Metoder, der er erklæret som, final
kan ikke tilsidesættes, og en klasse, der er erklæret som, final
kan ikke nedarves.
Modifikatoren final
kan tilføjes før alle variabler: lokale variabler, metodeparametre, klassefelter og statiske klassevariabler.
Bemærk, at final
før et variabelnavn kun er beskyttelse mod eventuelle ændringer af den variabel . Hvis en variabel gemmer en reference til et objekt, kan objektet stadig ændres.
Eksempel:
|
Vi skaber et array. Dette er ikke tilladt: variablen data erklæres som final . Men du kan gøre dette. Og også dette. |
Globale konstanter
Hvis du beslutter dig for at erklære globale konstanter i dit program, skal du oprette statiske klassevariabler og lave dem public
og final
. Der er en speciel stil for navnene på sådanne variabler: de er skrevet med store bogstaver, med et understregningstegn, der bruges til at adskille ord.
Eksempler:
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. Variabel skyggelægning
Som vi sagde før, kan du ikke oprette flere lokale variabler med samme navn i samme metode. I forskellige metoder kan du.
Men her er, hvad du sandsynligvis ikke ved: instansvariabler og lokale metodevariabler kan have samme navn.
Eksempel:
Kode | Variabel synlighed |
---|---|
|
|
I add
metoden erklærede vi en lokal variabel ved navn sum
. Indtil slutningen af metoden skygger (eller maskerer ) sum
instansvariablen.
Okay, siger du, det kan forventes på en eller anden måde. Men det er ikke slutningen på historien. Det viser sig, at hvis en instansvariabel overskygges af en lokal variabel, er der stadig en måde at henvise til instansvariablen i metoden. Det gør vi ved at skrive nøgleordet this
før dets navn:
this.name
Her er et eksempel, hvor navnekonflikten er løst:
Kode | Variabel synlighed |
---|---|
|
|
Variablerne count
og sum
er tilgængelige overalt med eller uden nøgleordet this
. På linjer, hvor den sum
lokale variabel skygger for sum
instansvariablen, sum
kan instansvariablen kun tilgås ved hjælp af this
nøgleordet.
Hvis en statisk klassevariabel i stedet for en forekomstvariabel skygges, skal du have adgang til den via klassenavnet i stedet for nøgleordet this
:
ClassName.name
Eksempel:
Kode | Variabel synlighed |
---|---|
|
|
Du kan få adgang til de statiske variable count
og sum
overalt med eller uden at bruge klassenavnet Solution
som præfiks. På de linjer, hvor den sum
lokale variabel skygger for sum
instansvariablen, sum
er adgang til instansvariablen kun mulig, når den bruges Solution
som et præfiks.
3. Variabler inde i en for
løkke
Og endnu et lille, men interessant faktum.
Der er også et sted, hvor en variabel erklæres på en speciel måde - inde i en for
loop .
Du husker måske, at en for
loop typisk har en tællervariabel i parentes. Og hvad bliver synligheden af denne variabel? Det er jo ikke i løkkens krop. Er det hele metoden? Eller ikke?
Det korrekte svar er: en variabel , der er erklæret i en for
løkkes overskrift , er kun synlig i løkkens brødtekst og i løkkens overskriftfor
.
Eksempel:
Kode | Variabel synlighed |
---|---|
|
|
Så du kan altid skrive sløjfer efter hinanden i din kode og bruge tællervariabler med samme navn - det vil ikke skabe nogen problemer.
Eksempel:
Kode | Variabel synlighed |
---|---|
|
|
GO TO FULL VERSION