"Halo, Amigo! Kudengar Rishi menjelaskan sesuatu yang baru dan menarik untukmu?!"

"Benar, Ki."

"Topik saya tidak akan kalah menarik. Saya ingin memberi tahu Anda tentang bagaimana kelas dimuat ke dalam memori."

Kelas di Java adalah file pada disk yang berisi bytecode, yang merupakan kode Java yang dikompilasi.

"Ya saya ingat."

Mesin Java tidak memuatnya jika tidak perlu. Segera setelah ada panggilan ke suatu kelas di suatu tempat di dalam kode, mesin Java akan memeriksa apakah kelas tersebut dimuat. Dan jika tidak, maka itu memuat dan menginisialisasi.

Inisialisasi kelas melibatkan pemberian nilai ke semua variabel statisnya dan memanggil semua blok inisialisasi statis.

"Kelihatannya mirip dengan memanggil konstruktor pada suatu objek. Tapi apa itu blok inisialisasi statis?"

"Jika Anda perlu mengeksekusi kode kompleks (misalnya, memuat sesuatu dari file) untuk menginisialisasi objek, kami dapat melakukannya di konstruktor. Namun, variabel statis tidak memiliki kesempatan ini. Namun karena masih diperlukan, Anda dapat tambahkan blok atau blok inisialisasi statis ke kelas. Mereka pada dasarnya setara dengan konstruktor statis."

Begini tampilannya:

Kode Apa yang sebenarnya terjadi
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");
}
}

Ini sangat mirip dengan apa yang terjadi ketika konstruktor dipanggil. Saya bahkan menulisnya sebagai konstruktor statis (tidak ada).

"Ya, saya mengerti."

"Sangat bagus."