1. Statiske variable
Når en klasse indlæses i hukommelsen, oprettes et statisk objekt med det samme. Dette objekt gemmer statiske klassevariabler (statiske klassefelter). Det statiske objekt eksisterer, selvom der ikke er oprettet nogen almindelige (ikke-statiske) objekter i klassen.
Når vi erklærer variabler i en klasse, angiver vi, om de kun vil blive oprettet én gang, eller om der skal være forskellige forekomster af disse variable i hvert objekt. Som standard oprettes en ny kopi af hver variabel for hvert objekt.
En statisk variabel er bundet til klassens statiske objekt, og der er altid en enkelt forekomst af den.
For at oprette en statisk variabel i en klasse skal du skrive nøgleordet static
før dets navn. Det generelle format til at erklære en statisk variabel er:
static Type name = value;
Hvis en statisk variabel ikke er tildelt en startværdi, initialiseres den med en standardværdi:
Type | Standard værdi |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
(det samme som
) |
|
|
og eventuelle klasser |
|
Eksempler:
Kode | Bemærk |
---|---|
|
|
|
|
|
|
|
|
|
Inde i en klasse kan du henvise til dens statiske variabler blot ved at bruge deres navne. Men for at få adgang til dem fra en anden klasse, skal du skrive navnet på klassen før navnet på den statiske variabel.
ClassName.variable
Eksempel:
Variabel | klasse | Adgang til en variabel uden for dens klasse |
---|---|---|
|
|
|
|
|
|
|
|
Variablen er private . Det er ikke synligt uden for klassen. |
|
|
Variablen er private . Det er ikke synligt uden for klassen. |
|
|
Variablen er private . Det er ikke synligt uden for klassen. |
2. Forskel mellem statiske og ikke-statiske variable
Ikke-statiske (almindelige) variable i en klasse erklæres på samme måde som statiske, kun uden nøgleordet static
.
Hvad er forskellen mellem almindelige variable og statiske variable?
Almindelige variable i en klasse er bundet til klassens objekter (forekomster af klassen), mens statiske variable er bundet til klassens statiske objekt.
Hvis der er flere forekomster af en klasse, har hver af dem sin egen kopi af de ikke-statiske (almindelige) variable. Statiske variabler for en klasse er altid gemt i dets statiske objekt, og der findes kun en enkelt forekomst af dem.
Du kan kun få adgang til de almindelige variabler (felter) i en klasse, hvis du har en reference til et objekt i klassen. Og inde i klassens metoder, selvfølgelig.
Eksempel:
Adgang til et felt i en klasse ved hjælp af en objektreference |
---|
|
Du kan få adgang til statiske variable hvor som helst (efter at have taget højde for synlighedsmodifikatorerne): fra almindelige metoder, fra statiske metoder af samme klasse, fra metoder fra andre klasser osv.
Eksempel:
Adgang til et statisk felt i en klasse uden at bruge en objektreference |
---|
|
Sådan er hukommelsen organiseret:
Lad os sige, at vi har en Person
klasse med 4 felter: to er statiske og to er ikke.
public class Person
{
public static int count = 0;
public static int sum = 0;
public int age = 0;
public String name;
}
Umiddelbart efter indlæsning af klassen
Når Java-maskinen er færdig med at indlæse Person
klassen, vil hukommelsen se sådan ud:
Efter at have oprettet det første objekt
Hvis vi opretter et Person
objekt, bliver billedet dette:
Bemærk venligst, at selvom begge objekter har to variable, er disse forskellige variabler: de almindelige objekter har almindelige variabler, og det statiske objekt har de statiske variable.
Vi har brug for flere genstande
Lad os skabe to Person
objekter mere. Nu vil hukommelsen se sådan ud:
Bemærk venligst, at hvert objekt har sine egne alders- og navnevariabler.
3. Fjernelse og tilføjelse af static
modifikatoren
Fra statisk til almindelig
Hvad sker der, hvis vi tager en statisk variabel og gør den til en almindelig variabel ved at fjerne dens static
modifikator? For eksempel static int sum
variablen.
Den ændrede kode vil se sådan ud:
public class Person
{
public static int count = 0;
public int sum = 0;
public int age = 0;
public String name;
}
Nu ser hukommelsen sådan ud:
Den statiske variabel forsvandt fra det statiske objekt, og nu har hvert almindeligt objekt sin egen sum
variabel.
Fra almindelig til statisk
Vi kan gøre det modsatte: tilføje static
modifikatoren til almindelige variable i en klasse. De vil forsvinde fra alle almindelige objekter og vises i det statiske objekt. Antag, at vi beslutter at gøre variablerne age
og name
statiske. Så vil koden se sådan ud:
public class Person
{
public static int count = 0;
public int sum = 0;
public static int age = 0;
public static String name;
}
Og nu vil hukommelsen se sådan ud:
GO TO FULL VERSION