"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."