2016-04-06 27 views
0

Java öğreticisi Oracle'a göre, statik değişkeni başlatmak için özel statik yöntem kullanılabilir. public static varType myVar = initializeClassVariable();'un ne zaman idam edildiğini merak ediyordum? Whatever sınıfının yeni bir örneğinin başlatılması sırasında mı yoksa yalnızca ilk kullanıldığında mı başlatılır? Herhangi bir yardım için şimdiden teşekkür ederiz! @ Elliott-frisch anlaşılacağı gibiStatik değişkeni özel statik yöntem kullanarak başlatılıyor

class Whatever { 
    public static varType myVar = initializeClassVariable(); 

    private static varType initializeClassVariable() { 

     // initialization code goes here 
    } 
} 
+0

sınıf başlatma sırasında da [JLS-8.7. Statik Başlatıcılar] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.7) –

cevap

1

, basit cevap JLS içinde:

https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.7 https://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.4.2

En kısa sürede bir sınıf Yüklendiği çalışan bir programda başvuruda bulunulan olarak - ki class örneğinin kendisine erişme veya sınıfın yeni bir örneğini oluşturma anlamına gelir.

Bir sınıf yükleme, söz konusu sınıfı içerebilecek, sonuçta oluşan bir kavanozu okuyabilecek ve ilgili bayt kodunu kavanozdan yükleyerek/onaylayan kavanozlar için sınıf yolunu taramayı içerir. Bunu yaptıktan sonra, sınıfın ilgili sınıf düzeyinde başlangıç ​​blokları tanımlanır ve yürütülür. 'dan önce olanların tümü, sınıfın herhangi bir örneğidir.

Dikkat edilmesi gereken tek şey, tüm bunların belirli bir sınıf yükleyiciyle sınırlı olmasıdır. Birden fazla sınıf yükleyici, aynı sınıf için, aynı veya farklı zamanlarda, tam olarak aynı adımları yerine getirebilir. Bu nedenle aynı statik başlatıcı, aynı JVM içinde birden fazla kez yürütülebilir, ancak tek bir sınıf yükleyici örneğinde sadece bir kez olmasına rağmen.

Temel olarak - bir sınıfa yapılan herhangi bir başvuru, sınıfın yüklenmesine neden olur, ancak yalnızca başvurulan sınıflar yüklenir. Sadece başvurulan bir sınıf bir kavanoz içinde yer aldığından, kavanoz içindeki diğer sınıfların yükleneceği anlamına gelmez.

When does the JVM load classes?

İlgili konular