2015-01-12 13 views
5

Ben ClassLoader kullanarak yüklemek isteyen küçük java sınıf yazılı olması.ClassLoader loadClass eseridir nedir()

public class ClassLoadingObj { 

    public ClassLoadingObj(){ 
     System.out.println("---instantiating ClassLoadingObj "); 
    } 

    static{ 
     System.out.println("---Loading ClassLoadingObj"); 
    } 
} 

Ama şu kodu çalıştırıldığında: Ben statik blok yürütülür almaz bulmak

ClassLoader.getSystemClassLoader().loadClass("com.st.classLoader.ClassLoadingObj"); 

. Benim soru şu ki, bir sınıf loadClass() yöntemini kullanarak yüklenirse, statik blokların her zaman çalıştırıldığı statik sınıfların bir sınıfın başlatılmasıyla karşılaştırıldığında neden çalıştırılmamasıdır.

cevap

3

Aslında statik blok sınıf olduğunda işletilirse için başvurabileceğiniz fazla bilgi başlatıldı ve farklı biraz yüklenen bu.

önce sınıfı bağlı olduğu başlatıldı ve bunun daha önce yüklenen, yani sınıfının durumları (değil yüklenmiş içeren veya 4) 3 bulunmaktadır.

Here iyi nasıl çalıştığını tarif edilir ve başlatılmış olmak için bir sınıf için gereklilikler nelerdir.

bir alıntı:

Java sanal makinesi özellikleri UYGULAMALARI sınıf ve arayüz yükleme ve bağlama zamanlaması esneklik verir, ancak kesinlikle başlatma zamanlamasını belirler. Tüm uygulamalar , her bir sınıfı veya arabirimi ilk etkin kullanımında başlatmalıdır. (Derlenmiş olarak yeni bir talimat yürütme Alternatif olarak, kapalı oluşturulması, yansıtma, klonlama ya da seri kaldırma yolu ile.). Sınıfın yeni bir örneği oluşturulur

  • : aşağıdaki altı durum aktif kullanım hak
  • (derlenmiş olarak, bir invokestatic talimat yürütme) bir sınıf tarafından bildirilen bir statik yöntemi çağırma
  • kesindir statik alanları dışında bir sınıf veya arayüz tarafından bildirilen bir statik alan kullanımı veya atama ve bir derleme zamanı sabit ifadesiyle başlatıldı (bayt kodlarında, yürütmeBir getstatic veya putstatic komutu) arasında
  • örneğin java.lang.reflect paketi
  • bir alt sınıfında başlatma sınıf Sınıfı yöntemleri olarak veya sınıflara Java API bazı yansıtıcı yöntemlerin çağırma sınıf (Bir sınıfın başlatılması, üst sınıfının daha önce başlatılmasını gerektirir.) Bir Java sanal makinesidir kadar
başlar
  • < yöntemi (ana (ile) ilk sınıf olarak bir sınıfın adı)
  • İlgili konular