CodeGym /Kurs /Java kjerne /Laster klasser, statiske data …

Laster klasser, statiske data …

Java kjerne
Nivå , Lekse
Tilgjengelig

"Hei, Amigo! Jeg hørte Rishi forklarte deg noe nytt og spennende?!"

"Det stemmer, Kim."

"Emnet mitt blir ikke mindre interessant. Jeg vil fortelle deg om hvordan klasser lastes inn i minnet."

Klasser i Java er filer på disken som inneholder bytecode, som er kompilert Java-kode.

"Ja jeg husker."

Java-maskinen laster dem ikke hvis den ikke trenger det. Så snart det er et kall til en klasse et sted i koden, sjekker Java-maskinen om den er lastet. Og hvis ikke, så laster den og initialiserer den.

Initialisering av en klasse innebærer å tilordne verdier til alle dens statiske variabler og kalle alle statiske initialiseringsblokker.

"Det ligner på å kalle en konstruktør på et objekt. Men hva er en statisk initialiseringsblokk?"

"Hvis du trenger å utføre kompleks kode (for eksempel laste inn noe fra en fil) for å initialisere objekter, kan vi gjøre det i en konstruktør. Statiske variabler har imidlertid ikke denne muligheten. Men siden behovet fortsatt eksisterer, kan du legg til en eller flere statiske initialiseringsblokker til klasser. De tilsvarer i utgangspunktet statiske konstruktører."

Slik ser det ut:

Kode Hva skjer egentlig
class Cat
{
public static int catCount = 0 ;
public static String namePrefix;

static
{
Properties p = new Properties();
p.loadFromFile("cat.properties");
namePrefix = p.get("name-prefix");
}

public static int maxCatCount = 50;

static
{
Properties p = new Properties();
p.loadFromFile("max.properties");
if (p.get("cat-max") != null)
maxCatCount = p.getInt("cat-max");
}

}


class Cat
{
public static int catCount;
public static String namePrefix;
public static int maxCatCount;

//Static constructors aren't allowed in Java,
//but if they were, everything
//would look like this
public static Cat()
{
catCount = 0;

Properties p = new Properties();
p.loadFromFile("cat.properties");
namePrefix = p.get("name-prefix");

maxCatCount = 50;

Properties p2 = new Properties();
p2.loadFromFile("max.properties");
if (p2.get("cat-max")!=null)
maxCatCount = p2.getInt("cat-max");
}
}

Det er mye som det som skjer når en konstruktør blir tilkalt. Jeg har til og med skrevet det som en (ikke-eksisterende) statisk konstruktør.

"Ja jeg forstår."

"Veldig bra."

Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION