Sobes.tech
Middle

Java-da ClassLoader nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da ClassLoader, JVM-nin (Java Virtual Machine) sinfləri yükləməkdən məsul olan komponentidir.

Əsas funksiyalar:

  • Yükləmə: Fərqli mənbələrdən (.class bayt kod faylları) sinfləri tapır və yükləyir (fayl sistemi, şəbəkə, JAR arxivləri).
  • Bağlama (Linking):
    • Yoxlama: Bayt kodunun düzgünlüyünü və təhlükəsizlik standartlarına uyğunluğunu yoxlayır.
    • Hazırlıq: Statik dəyişənlər üçün yaddaş ayırır və onların standart dəyərlərini ilkinləşdirir.
    • Həll (istəyə bağlı): Sembolik istinadları (məsələn, digər sinflərə və ya metodlara istinadlar) birbaşa yaddaş istinadlarına dəyişir.
  • İlkinləşdirmə: Sinifin statik başlanğıc bloklarını icra edir və statik sahələrə ilkin dəyərlər verir.

Hierarxiya:

ClassLoader-lər hierarxiya təşkil edir. Bir ClassLoader sinfi yükləmək üçün, əvvəlcə onun valideyn ClassLoader-ına müraciət edir. Əgər valideyn sinfi tapmazsa və ya yükləyə bilməzsə, cari ClassLoader öz-özünə cəhd edir.

Əsas inteqrasiya olunmuş ClassLoader-lər:

  • Bootstrap ClassLoader: JVM-nin yerli hissəsidir, əsas JDK sinflərini yükləyir (məsələn, java.lang.Object).
  • Extension ClassLoader (modern JVM versiyalarında onu System ClassLoader ilə birləşdirə bilərlər): ext qovluğundan sinfləri yükləyir.
  • System ClassLoader: tətbiqin classpath-dən sinfləri yükləyir.

İstifadə nümunəsi:

// Mövcud sinfin ClassLoader-ını əldə et
ClassLoader classLoader = MyClass.class.getClassLoader();

try {
    // Tam adı ilə sinfi yüklə
    Class<?> loadedClass = classLoader.loadClass("com.example.AnotherClass");
    System.out.println("Yüklənmiş sinif: " + loadedClass.getName());
} catch (ClassNotFoundException e) {
    System.err.println("Sinif tapılmadı: " + e.getMessage());
}

Üstünlüklər:

  • Dinamik yükləmə: Sinfləri tələb olunduqda yükləməyə imkan verir, bu da resurslardan qənaət edir.
  • Modulluq: Tətbiqin müxtəlif hissələri müxtəlif ClassLoader-lərdən istifadə edə bilər, bu da kodun izolyasiyasına kömək edir.
  • Təhlükəsizlik: Bayt kodunun yoxlanması əsas təhlükəsizliyi təmin edir.
  • HotSwapping: Bəzi mühitlərdə ClassLoader-lər yüklənmiş sinfləri JVM-i yenidən başlatmadan dəyişdirməyə imkan verir.