Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ClassLoader ทำงานอย่างไรใน Java

Java Class คอมไพล์เป็น Bytecode ในไฟล์ .class ClassLoader โหลดคลาสเข้าหน่วยความจำเมื่อต้องการ แบบ Hierarchical (ลำดับชั้น) หากมีคำขอโหลด จะมอบหมายให้ Parent ClassLoader ก่อน

ประเภท ClassLoader 3 ระดับ

  1. Bootstrap ClassLoader - โหลด Core Java Classes (rt.jar) - Native Code
  2. Extension ClassLoader - โหลด Extensions (jre/lib/ext) - Child ของ Bootstrap
  3. System/Application ClassLoader - โหลด Classpath ของแอปพลิเคชัน - Child ของ Extension

ตัวอย่าง: ดู ClassLoader ของคลาสต่างๆ


public class ClassLoaderTest {
    public static void main(String[] args) {
        System.out.println("ClassLoader of this class: " 
            + ClassLoaderTest.class.getClassLoader());
        System.out.println("ClassLoader of DNSNameService: " 
            + sun.net.spi.nameservice.dns.DNSNameService.class.getClassLoader());
        System.out.println("ClassLoader of HashMap: " 
            + java.util.HashMap.class.getClassLoader());
    }
}

ผลลัพธ์

ClassLoader of this class: sun.misc.Launcher$AppClassLoader@73d16e93
ClassLoader of DNSNameService: sun.misc.Launcher$ExtClassLoader@70dea4e
ClassLoader of HashMap: null

คำอธิบาย:

  • AppClassLoader (System) โหลดคลาสของเรา
  • ExtClassLoader โหลด Extension Classes
  • null = Bootstrap ClassLoader (Native, ไม่ใช่ Java Object)

หลักการ Delegation: Child ขอ Parent โหลดก่อน → Parent ไม่เจอ → Child โหลดเอง (ป้องกันโหลดซ้ำและ Security)