1. Statische variabelen
Wanneer een klasse in het geheugen wordt geladen, wordt er onmiddellijk een statisch object gemaakt. Dit object slaat statische klassevariabelen op (statische klassevelden). Het statische object bestaat zelfs als er geen gewone (niet-statische) objecten van de klasse zijn gemaakt.
Wanneer we variabelen in een klasse declareren, geven we aan of ze slechts één keer worden gemaakt, of dat er afzonderlijke instanties van deze variabelen in elk object moeten zijn. Standaard wordt voor elk object een nieuwe kopie van elke variabele gemaakt.
Een statische variabele is gebonden aan het statische object van de klasse en er is altijd een enkele instantie van.
Om een statische variabele in een klasse te maken, moet u het static
trefwoord voor de naam ervan schrijven. Het algemene formaat voor het declareren van een statische variabele is:
static Type name = value;
Als aan een statische variabele geen initiële waarde is toegewezen, wordt deze geïnitialiseerd met een standaardwaarde:
Type | Standaardwaarde |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
(hetzelfde als
) |
|
|
en eventuele lessen |
|
Voorbeelden:
Code | Opmerking |
---|---|
|
|
|
|
|
|
|
|
|
Binnen een klasse kun je eenvoudig naar de statische variabelen verwijzen door hun namen te gebruiken. Maar om toegang te krijgen tot een andere klasse, moet u de naam van de klasse vóór de naam van de statische variabele schrijven.
ClassName.variable
Voorbeeld:
Variabel | Klas | Toegang tot een variabele buiten zijn klasse |
---|---|---|
|
|
|
|
|
|
|
|
De variabele is private . Het is niet zichtbaar buiten de klas. |
|
|
De variabele is private . Het is niet zichtbaar buiten de klas. |
|
|
De variabele is private . Het is niet zichtbaar buiten de klas. |
2. Verschil tussen statische en niet-statische variabelen
Niet-statische (gewone) variabelen van een klasse worden op dezelfde manier gedeclareerd als statische variabelen, alleen zonder het static
trefwoord.
Wat is het verschil tussen gewone variabelen en statische variabelen?
Gewone variabelen van een klasse zijn gebonden aan objecten van de klasse (exemplaren van de klasse), terwijl statische variabelen zijn gebonden aan het statische object van de klasse.
Als er meerdere instanties van een klasse zijn, heeft elk van hen zijn eigen kopie van de niet-statische (gewone) variabelen. Statische variabelen van een klasse worden altijd opgeslagen in het statische object en er bestaat slechts één exemplaar van.
Je hebt alleen toegang tot de gewone variabelen (velden) van een klasse als je een verwijzing hebt naar een object van de klasse. En binnen de methoden van de klas, natuurlijk.
Voorbeeld:
Toegang krijgen tot een veld van een klasse met behulp van een objectreferentie |
---|
|
U kunt overal toegang krijgen tot statische variabelen (na rekening te hebben gehouden met de zichtbaarheidsmodificatoren): van gewone methoden, van statische methoden van dezelfde klasse, van methoden van andere klassen, enz.
Voorbeeld:
Toegang krijgen tot een statisch veld van een klasse zonder een objectreferentie te gebruiken |
---|
|
Hoe het geheugen is georganiseerd:
Laten we zeggen dat we een Person
klasse hebben met 4 velden: twee zijn statisch en twee niet.
public class Person
{
public static int count = 0;
public static int sum = 0;
public int age = 0;
public String name;
}
Onmiddellijk na het laden van de klasse
Wanneer de Java-machine klaar is met het laden van de Person
klasse, ziet het geheugen er als volgt uit:
Na het maken van het eerste object
Als we een Person
object maken, wordt de afbeelding dit:
Houd er rekening mee dat hoewel beide objecten twee variabelen hebben, dit verschillende variabelen zijn: de gewone objecten hebben gewone variabelen en het statische object heeft de statische variabelen.
We hebben meer objecten nodig
Laten we nog twee Person
objecten maken. Het geheugen ziet er nu zo uit:
Houd er rekening mee dat elk object zijn eigen leeftijds- en naamvariabelen heeft.
static
3. De modifier verwijderen en toevoegen
Van statisch tot gewoon
Wat gebeurt er als we een statische variabele nemen en deze in een gewone veranderen door de static
modifier te verwijderen? Bijvoorbeeld de static int sum
variabele.
De gewijzigde code ziet er als volgt uit:
public class Person
{
public static int count = 0;
public int sum = 0;
public int age = 0;
public String name;
}
Het geheugen ziet er nu zo uit:
De statische variabele verdween uit het statische object en nu heeft elk gewoon object zijn eigen sum
variabele.
Van gewoon tot statisch
We kunnen het tegenovergestelde doen: de static
modifier toevoegen aan gewone variabelen van een klasse. Ze verdwijnen uit alle gewone objecten en verschijnen in het statische object. Stel dat we besluiten de variabelen en statisch te maken . age
name
Dan ziet de code er zo uit:
public class Person
{
public static int count = 0;
public int sum = 0;
public static int age = 0;
public static String name;
}
En nu ziet het geheugen er zo uit:
GO TO FULL VERSION