"Hej, Amigo! Jag hörde Rishi förklara något nytt och spännande för dig?!"

"Det stämmer, Kim."

"Mitt ämne kommer inte att bli mindre intressant. Jag vill berätta om hur klasser laddas in i minnet."

Klasser i Java är filer på disken som innehåller bytecode, som är kompilerad Java-kod.

"Ja, jag kommer ihåg."

Java-maskinen laddar dem inte om den inte behöver. Så fort det finns ett anrop till en klass någonstans i koden, kontrollerar Java-maskinen om den är laddad. Och om inte, så laddar den och initierar den.

Att initiera en klass innebär att tilldela värden till alla dess statiska variabler och anropa alla statiska initieringsblock.

"Det verkar likna att anropa en konstruktor på ett objekt. Men vad är ett statiskt initieringsblock?"

"Om du behöver exekvera komplex kod (till exempel ladda något från en fil) för att initiera objekt kan vi göra det i en konstruktor. Statiska variabler har dock inte den här möjligheten. Men eftersom behovet fortfarande kvarstår kan du lägg till ett eller flera statiska initieringsblock till klasser. De är i princip likvärdiga med statiska konstruktorer."

Så här ser det ut:

Koda Vad händer egentligen
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 är ungefär som vad som händer när en konstruktör anropas. Jag har till och med skrivit det som en (obefintlig) statisk konstruktor.

"Ja jag förstår."

"Mycket bra."