"Merhaba Amigo! Rishi'nin sana yeni ve heyecan verici bir şey açıkladığını duydum?!"

"Bu doğru, Kim."

"Konum daha az ilginç olmayacak. Size sınıfların belleğe nasıl yüklendiğini anlatmak istiyorum."

Java'daki sınıflar, diskte derlenmiş Java kodu olan bayt kodunu içeren dosyalardır.

"Evet ben hatırlıyorum."

Java makinesi, gerekmedikçe bunları yüklemez. Kodun herhangi bir yerinde bir sınıfa çağrı yapılır yapılmaz, Java makinesi yüklenip yüklenmediğini kontrol eder. Ve değilse, o zaman onu yükler ve başlatır.

Bir sınıfı başlatmak, tüm statik değişkenlerine değer atamayı ve tüm statik başlatma bloklarını çağırmayı içerir.

"Bu, bir nesne üzerinde kurucu çağırmaya benziyor. Ama statik başlatma bloğu nedir?"

"Nesneleri başlatmak için karmaşık kod yürütmeniz gerekiyorsa (örneğin, bir dosyadan bir şey yüklemek), bunu bir yapıcıda yapabiliriz. Ancak, statik değişkenlerin bu fırsatı yoktur. Ancak ihtiyaç devam ettiği için, sınıflara statik bir başlatma bloğu veya blokları ekleyin. Temelde statik oluşturuculara eşdeğerdirler."

İşte böyle görünüyor:

kod gerçekten ne oluyor
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");
}
}

Bir yapıcı çağrıldığında olanlara çok benzer. Hatta (var olmayan) bir statik kurucu olarak yazdım.

"Evet anladım."

"Çok güzel."