SORU
11 Mart 2010, PERŞEMBE


Java ClassLoader nedir?

Birkaç basit cümle ile, bir Java ClassLoader, ne işe yarar ve neden?

TAMAM, wiki bir makale okudum. Yükler sınıfları ClassLoader. TAMAM. Eğer jar dosyaları ve ithalat dahil, bir ClassLoader iş yok.

Neden bu ClassLoader seçmeli? Hiç kullanmadım ve bunun var olduğunu bile bilmiyordum.

Soru, neden ClassLoader sınıfı var mı? Ve ayrıca, nasıl pratik olarak kullanıyor musunuz? (Kutular var, biliyorum.)

CEVAP
11 Mart 2010, PERŞEMBE


tutorial Güneşten bu güzel alınan:

Motivasyon

Uygulamalar statik olarak yazılmış programlama dilleri, C ve C gibi , yerel, özel makine talimatları içine derlenir ve çalıştırılabilir bir dosya olarak kaydedilmiş derlenmiş. Yürütülebilir yerel bir kod içine kod birleştirme işlemi - paylaşılan kütüphane kod ile ayrı ayrı derlenmiş kod birleştirme çalıştırılabilir bir uygulama oluşturmak için bağlama denir. Bu dinamik olarak Java gibi programlama dilleri derlenmiş farklıdır. , Java .sınıf dosyaları, Java derleyicisi tarafından oluşturulan Java Sanal Makinesi (JVM) -- diğer bir deyişle yüklenen, bağlama işlemi çalışma zamanında JVM tarafından yapılır kadar olduğu gibi kalır. Sınıfları bir JVM yüklü 'ihtiyaç' olarak. Ve yüklü bir sınıfın başka bir sınıf üzerinde bağlıdır, o zaman bu sınıf dolu.

Bir Java uygulaması başlatıldığında çalıştırmak için birinci sınıf (ya da uygulamaya giriş noktası) public static void main yöntemi olarak bilinen biridir). Bu sınıf genellikle diğer sınıflar için başvuru var, ve başvurulan sınıflar yüklemek için tüm girişimleri sınıf yükleyicisi tarafından yürütülmektedir.

Bu özyinelemeli sınıf yükleme hem de genel olarak sınıf yükleme fikri hakkında bir fikir edinmek için, aşağıdaki basit sınıf göz önünde bulundurun:

public class HelloApp {
   public static void main(String argv[]) {
      System.out.println("Aloha! Hello and Bye");
   }
}

Eğer bu sınıf ayrıntılı sınıf yükleniyor ne yazdırır, böylece komut satırı seçeneği, belirtme çalıştırırsanız, aşağıdaki gibi görünen bir çıktı alırsınız. Bu liste burada göstermek için çok uzun zamandan beri kısmi bir çıkış olduğunu unutmayın.

prmpt>java -verbose:class HelloApp



[Opened C:\Program Files\Java\jre1.5.0\lib\rt.jar]
[Opened C:\Program Files\Java\jre1.5.0\lib\jsse.jar]
[Opened C:\Program Files\Java\jre1.5.0\lib\jce.jar]
[Opened C:\Program Files\Java\jre1.5.0\lib\charsets.jar]
[Loaded java.lang.Object from shared objects file]
[Loaded java.io.Serializable from shared objects file]
[Loaded java.lang.Comparable from shared objects file]
[Loaded java.lang.CharSequence from shared objects file]
[Loaded java.lang.String from shared objects file]
[Loaded java.lang.reflect.GenericDeclaration from shared objects file]
[Loaded java.lang.reflect.Type from shared objects file]
[Loaded java.lang.reflect.AnnotatedElement from shared objects file]
[Loaded java.lang.Class from shared objects file]
[Loaded java.lang.Cloneable from shared objects file]
[Loaded java.lang.ClassLoader from shared objects file]
[Loaded java.lang.System from shared objects file]
[Loaded java.lang.Throwable from shared objects file]
.
.
.
[Loaded java.security.BasicPermissionCollection from shared objects file]
[Loaded java.security.Principal from shared objects file]
[Loaded java.security.cert.Certificate from shared objects file]
[Loaded HelloApp from file:/C:/classes/]
Aloha! Hello and Bye
[Loaded java.lang.Shutdown from shared objects file]
[Loaded java.lang.Shutdown$Lock from shared objects file]

Gördüğünüz gibi, Java çalışma zamanı sınıfları uygulama sınıfı tarafından gerekli (HelloApp) ilk yüklenir.

Java 2 Platform sınıf Yükleyiciler

Java programlama dili uygulamalar geliştiriciler daha kolay günlük yaşam için gelişen tutar. Bu iş mantığı konsantre izin vererek hayatını kolaylaştıran sağlayan API yerine temel mekanizmaları uygulama ayrıntıları ile yapılır. Bu Java platformu vadesi yansıtabilmek için J2SE 5.0 J2SE 1.5 son değişikliği ile açıktır.

Yazılım ve programları olarak JVM yerleşik 1.2, bootstrap sınıf bir loader Java çalışma zamanı sınıfları yüklemeden sorumludur. Bu sınıf sadece boot sınıf içinde bulunan loader yükler sınıfları ve bu sınıflar güvenilir olduğundan doğrulama işlemini güvenilir olmayan sınıflar olarak gerçekleştirilir. Ek olarak bootstrap loader sınıfı, JVM bir uzantısı sınıfı, loader sorumlu yükleme sınıflardan standart uzantısı API ve sistem sınıf yükleyicisi yükler sınıflardan bir genel sınıf yol olarak uygulama sınıfları.

Birden fazla sınıf loader olmadığı için, bootstrap sınıf yükleyicisi olan bir ağaç olarak temsil edilirler. Her sınıf loader üst sınıf yükleyicisi için bir başvuru var. Sınıf yükleyicisi bir sınıf yüklemek için sorulduğunda, maddenin kendisi yüklemek için denemeden önce üst sınıf loader danışır. Sırayla üst üst ve danışır. Sadece sonuçta çok üst sınıf mevcut sınıf yükleyicisi yer alır sınıf bulamıyor yükleyiciler. Diğer bir deyişle, heyet bir model kullanılır.

Java.lang.ClassLoader Sınıfı

java.lang.ClassLoader hangi JVM dinamik sınıfları yükler şekilde genişletmek için gereken uygulamalar tarafından alt sınıfı soyut bir sınıftır. java.lang.ClassLoader kurucular (ve alt) yeni bir sınıf yükleyicisi başlatılamadı bir üst belirlemenize olanak sağlar. Eğer açıkça bir ebeveyn belirtmeniz yok eğer doğru değilse, sanal makine sistem sınıf yükleyicisi varsayılan ana olarak atanacaktır. Diğer bir deyişle, ClassLoader sınıfı sınıfları ve kaynakları aramak için heyet bir model kullanır. Bu nedenle, her örnek ClassLoader bir ilişkili üst sınıf yükleyicisi, bu yüzden o zaman istenen bir sınıf veya kaynakları, görev, temsilci için üst sınıf loader denemeden önce bulmak için sınıf veya kaynak kendisi. Bu ClassLoader loadClass() yöntemi bir sınıf yüklemek için aradığında aşağıdaki görevleri sırayla gerçekleştirir:

Eğer bir sınıf zaten yüklenmiş ise, onu verir. Aksi halde, üst sınıf yükleyicisi için delegeler yeni sınıfın arama. Eğer üst sınıf loader sınıfını bulmak değilse, loadClass() yöntem çağrıları 8* *ve sınıf bulmak yüklemek için. finalClass() yöntem ise sınıf üst sınıf yükleyicisi tarafından bulunmuş olmasaydı, mevcut sınıf yükleyicisi sınıfı arar.


Neden Sorunuzun cevabını kendi ağ sınıf yükleyiciler, (ve nasıl) nasıl da gösteren özgün makale daha var. Ayrıca API docs bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fraser Raft

    Fraser Raft

    9 Mart 2010
  • majesticdubstep

    majesticdubs

    3 Kasım 2011
  • The Verge

    The Verge

    8 AĞUSTOS 2006