1. Konstanter
Många andra programmeringsspråk har konstanter , det vill säga variabler vars värden inte kan ändras . Vanligtvis används de för någon form av grundläggande sak som antalet Pi
eller antalet dagar i årets månader. Som sagt, i princip kan en programmerare göra vilken variabel som helst till en konstant, om han eller hon beslutar att det är nödvändigt.
Så hur deklarerar man en oföränderlig variabel (konstant) i Java? Det finns ett speciellt nyckelord för detta: final
. Att skapa en oföränderlig variabel ser ut på samma sätt som att skapa en vanlig. Den enda skillnaden är att innan variabelns typ måste du skriva ordet , final
så här:
final Type name = value;
Om du försöker tilldela ett annat värde till en final
variabel, kommer ditt program helt enkelt inte att kompilera.
En final
variabel måste initieras (ett värde måste tilldelas den) när den deklareras. Det finns ett undantag från denna regel: du kan flytta initiering av en statisk klassvariabel till en konstruktor. Men du kommer att lära dig om detta på nivå 10 .
För att minska antalet nyckelord använder Java-utvecklare ordet final
för mer än att bara deklarera konstanter. final
kan även gälla metoder och till och med klasser. Metoder som deklareras som final
kan inte åsidosättas, och en klass som deklareras som final
kan inte ärvas.
Modifieraren final
kan läggas till före alla variabler: lokala variabler, metodparametrar, klassfält och statiska klassvariabler.
Observera att final
innan ett variabelnamn bara är skydd mot alla ändringar av den variabeln . Om en variabel lagrar en referens till ett objekt kan objektet fortfarande ändras.
Exempel:
|
Vi skapar en array. Detta är inte tillåtet: variabeln data deklareras som final . Men du kan göra det här. Och även detta. |
Globala konstanter
Om du bestämmer dig för att deklarera globala konstanter i ditt program måste du skapa statiska klassvariabler och göra dem public
och final
. Det finns en speciell stil för namnen på sådana variabler: de är skrivna med stora bokstäver, med ett understreck som används för att separera ord.
Exempel:
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 skuggning
Som vi sa tidigare kan du inte skapa flera lokala variabler med samma namn i samma metod. I olika metoder kan du.
Men här är vad du förmodligen inte vet: instansvariabler och lokala metodvariabler kan ha samma namn.
Exempel:
Koda | Variabel sikt |
---|---|
|
|
I add
metoden deklarerade vi en lokal variabel med namnet sum
. Fram till slutet av metoden skuggar (eller maskerar ) instansvariabeln sum
.
Okej, säger du, det är förväntat i någon mening. Men det är inte slutet på historien. Det visar sig att om en instansvariabel skuggas av en lokal variabel så finns det fortfarande ett sätt att referera till instansvariabeln inom metoden. Vi gör detta genom att skriva this
nyckelordet före dess namn:
this.name
Här är ett exempel där namnkonflikten har lösts:
Koda | Variabel sikt |
---|---|
|
|
Variablerna count
och sum
är tillgängliga överallt med eller utan this
nyckelordet. På rader där den sum
lokala variabeln skuggar sum
instansvariabeln sum
kan instansvariabeln endast nås med this
nyckelordet.
Om en statisk klassvariabel snarare än en instansvariabel är skuggad, måste du komma åt den genom klassnamnet snarare än nyckelordet this
:
ClassName.name
Exempel:
Koda | Variabel sikt |
---|---|
|
|
Du kan komma åt de statiska variablerna count
och sum
överallt med eller utan att använda klassnamnet Solution
som prefix. På de rader där den sum
lokala variabeln skuggar sum
instansvariabeln sum
är åtkomst till instansvariabeln endast möjlig när den används Solution
som ett prefix.
3. Variabler inuti en for
slinga
Och ytterligare ett litet men intressant faktum.
Det finns också en plats där en variabel deklareras på ett speciellt sätt — inuti en for
loop .
Du kanske minns att en for
slinga vanligtvis har en räknarvariabel inom parentes. Och vad blir synligheten för denna variabel? Det är trots allt inte i slingans kropp. Är det hela metoden? Eller inte?
Det korrekta svaret är: en variabel som deklareras i en for
loops rubrik är endast synlig i loopens brödtext och i loopens rubrikfor
.
Exempel:
Koda | Variabel sikt |
---|---|
|
|
Så du kan alltid skriva loopar efter varandra i din kod och använda räknarvariabler med samma namn - det kommer inte att skapa några problem.
Exempel:
Koda | Variabel sikt |
---|---|
|
|
GO TO FULL VERSION