"Hej, Amigo! Jeg hørte Rishi forklare dig noget nyt og spændende?!"

"Det er rigtigt, Kim."

"Mit emne bliver ikke mindre interessant. Jeg vil gerne fortælle dig om, hvordan klasser indlæses i hukommelsen."

Klasser i Java er filer på disken, der indeholder bytecode, som er kompileret Java-kode.

"Ja, jeg husker."

Java-maskinen indlæser dem ikke, hvis det ikke er nødvendigt. Så snart der er et opkald til en klasse et sted i koden, tjekker Java-maskinen om den er indlæst. Og hvis ikke, så indlæser den og initialiserer den.

Initialisering af en klasse involverer at tildele værdier til alle dens statiske variable og kalde alle statiske initialiseringsblokke.

"Det ligner at kalde en konstruktør på et objekt. Men hvad er en statisk initialiseringsblok?"

"Hvis du skal udføre kompleks kode (f.eks. indlæse noget fra en fil) for at initialisere objekter, kan vi gøre det i en konstruktør. Statiske variable har dog ikke denne mulighed. Men da behovet stadig er til stede, kan du tilføje en eller flere statiske initialiseringsblokke til klasser. De svarer grundlæggende til statiske konstruktører."

Sådan ser det ud:

Kode Hvad sker der virkelig
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 minder meget om, hvad der sker, når en konstruktør bliver kaldt. Jeg har endda skrevet det som en (ikke-eksisterende) statisk konstruktør.

"Ja, jeg forstår det."

"Meget godt."