"Hello, Amigo! I heard Rishi explained something new and exciting to you?!"

"Tama na yan Kim."

"Ang aking paksa ay hindi gaanong kawili-wili. Gusto kong sabihin sa iyo ang tungkol sa kung paano na-load ang mga klase sa memorya."

Ang mga klase sa Java ay mga file sa disk na naglalaman ng bytecode, na pinagsama-samang Java code.

"Oo, naaalala ko."

Hindi nilo-load ng Java machine ang mga ito kung hindi nito kailangan. Sa sandaling may tumawag sa isang klase sa isang lugar sa code, susuriin ng Java machine kung na-load ito. At kung hindi, pagkatapos ay naglo-load ito at magsisimula ito.

Ang pagsisimula ng isang klase ay nagsasangkot ng pagtatalaga ng mga halaga sa lahat ng mga static na variable nito at pagtawag sa lahat ng static na pagsisimula ng mga bloke.

"Mukhang katulad iyon ng pagtawag sa isang constructor sa isang bagay. Ngunit ano ang isang static na initialization block?"

"Kung kailangan mong magsagawa ng kumplikadong code (halimbawa, naglo-load ng isang bagay mula sa isang file) upang simulan ang mga bagay, magagawa namin ito sa isang constructor. Gayunpaman, ang mga static na variable ay walang ganitong pagkakataon. Ngunit dahil nananatili pa rin ang pangangailangan, maaari mong magdagdag ng static initialization block o block sa mga klase. Ang mga ito ay karaniwang katumbas ng static constructor."

Ganito ang hitsura nito:

Code Kung ano talaga ang nangyayari
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");
}
}

Ito ay katulad ng kung ano ang nangyayari kapag tinawag ang isang constructor. Isinulat ko pa ito bilang isang (wala) static na tagabuo.

"Oo nakuha ko."

"Very good."