"Xin chào, Amigo! Tôi nghe nói Rishi đã giải thích điều gì đó mới mẻ và thú vị cho bạn?!"

"Đúng vậy Kim."

"Chủ đề của tôi sẽ không kém phần thú vị. Tôi muốn nói với bạn về cách các lớp được tải vào bộ nhớ."

Các lớp trong Java là các tệp trên đĩa có chứa mã byte, là mã Java được biên dịch.

"Vâng tôi nhớ."

Máy Java không tải chúng nếu không cần thiết. Ngay khi có lời gọi đến một lớp ở đâu đó trong mã, máy Java sẽ kiểm tra xem nó đã được tải chưa. Và nếu không, nó sẽ tải và khởi tạo nó.

Việc khởi tạo một lớp liên quan đến việc gán các giá trị cho tất cả các biến tĩnh của nó và gọi tất cả các khối khởi tạo tĩnh.

"Điều đó có vẻ giống với việc gọi hàm tạo trên một đối tượng. Nhưng khối khởi tạo tĩnh là gì?"

"Nếu bạn cần thực thi mã phức tạp (ví dụ: tải thứ gì đó từ tệp) để khởi tạo đối tượng, chúng ta có thể thực hiện việc đó trong hàm tạo. Tuy nhiên, biến tĩnh không có cơ hội này. Nhưng vì nhu cầu vẫn còn, bạn có thể thêm một hoặc nhiều khối khởi tạo tĩnh vào các lớp. Về cơ bản, chúng tương đương với các hàm tạo tĩnh."

Cái này nó thì trông như thế nào:

Mã số Điều gì thực sự xảy ra
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");
}
}

Nó rất giống với những gì xảy ra khi một hàm tạo được gọi. Tôi thậm chí đã viết nó dưới dạng hàm tạo tĩnh (không tồn tại).

"Vâng, tôi hiểu rồi."

"Rất tốt."