Rumah  >  Soal Jawab  >  teks badan

java - 所有类都是由Object类的记载器加载的吗?

看到网上这么说:

双亲委派机制描述
某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

首先将加载任务委托给父类加载器,依次递归 这句话的意思是所有类都是由Object类的记载器加载的吗?

大家讲道理大家讲道理2744 hari yang lalu594

membalas semua(3)saya akan balas

  • 大家讲道理

    大家讲道理2017-04-18 10:50:25

    Pemuat kelas pertama mesin maya Java ialah Bootstrap Pemuat ini bersarang dalam kernel mesin maya Java Ia adalah kod binari (bukan bytecode) yang ditulis dalam C++.

    Menggunakan mekanisme delegasi, kelas induk akan dicari secara rekursif, iaitu, lebih baik menggunakan Bootstrap untuk cuba memuatkan, dan jika ia tidak dijumpai, turun ke bawah. Halang dua salinan kod bait daripada muncul dalam ingatan.

    Anda salah faham Kelas dan ClassLoader.

    Apabila kelas direkodkan, mula-mula gunakan pemuat kelas bagi utas semasa untuk memuatkan kelas pertama dalam utas Contohnya, kelas ini ialah ClassA dan pemuat kelas ialah ClassLoaderA.

    Jika ClassA merujuk ClassB, sistem akan menggunakan ClassLoaderA untuk memuatkan ClassB.

    Kini terdapat 2 kelas (versi ringkas, sebenarnya lebih daripada 2 kelas).

    Mari kita pertimbangkan situasi di mana ClassX dan ClassY telah dimuatkan dalam ingatan, dan kedua-duanya merujuk kepada ClassZ Jadi siapa yang memuatkan ClassZ?

    Jelas sekali, mengikut langkah pemuatan yang diterangkan di atas, 2 salinan ClassZ akan muncul: ClassX dimuatkan sekali dan ClassY dimuatkan semula. Kerana ClassY tidak tahu bahawa ClassX telah dimuatkan.

    Cara menyelesaikan masalah ini ialah dengan mencari secara rekursif ke kelas induk.

    Langkah-langkah khusus ialah mencari terlebih dahulu daripada BootstrapClassLoader Jika BootstrapClassLoader telah memuatkan kelas ini, kembalikannya Jika BootstrapClassLoader belum memuatkan kelas ini, teruskan mencari sehingga ia menemui kelas ini. Jika pemuat kelas bagi utas ini tidak ditemui, ini bermakna kelas itu belum dimuatkan dan pemuat utas semasa digunakan untuk memuatkannya. Anda boleh menggunakan getContextClassLoader() untuk mendapatkan pemuat kelas urutan semasa.

    balas
    0
  • 高洛峰

    高洛峰2017-04-18 10:50:25

    Terdapat dua jenis pemuat kelas dalam Java: pemuat kelas sistem dan pemuat kelas yang ditentukan pengguna.

    Pemuat kelas sistem akan mempunyai sekatan laluan pemuatan Contohnya, Bootstrap Class Loader di bawah JDK1.6, anda boleh mendapatkan laluan pemuatan kelas
    melalui System.getProperty("sun.boot.class.path")

    .
    JAVA_HOME\jre6\lib\resources.jar;  
    JAVA_HOME\Java\jre6\lib\rt.jar;  
    JAVA_HOME\jre6\lib\sunrsasign.jar;  
    JAVA_HOME\jre6\lib\jsse.jar;JAVA_HOME\jre6\lib\jce.jar;  
    JAVA_HOME\jre6\lib\charsets.jar;  
    JAVA_HOME\jre6\lib\modules\jdk.boot.jar;  
    JAVA_HOME\jre6\classes 

    Kelas di bawah laluan ini dikendalikan oleh Bootstrap Jika kelas di bawah laluan lain diulang kepada Bootstrap dan fail kelas tidak ditemui, pemuat kelas peringkat seterusnya akan memuatkannya dalam laluan yang sepadan.

    balas
    0
  • 迷茫

    迷茫2017-04-18 10:50:25

    Apa yang orang di atas katakan betul, saya cadangkan anda membaca buku berkaitan jvm untuk mengetahui lebih lanjut mengenainya.

    balas
    0
  • Batalbalas