JVM學習筆記21——類加載器實戰剖析與疑難點解析

獲取類加載器的加載路徑

URLClassLoader extClassLoader = (URLClassLoader)ClassLoader.getSystemClassLoader().getParent();
        URL[] urLs = extClassLoader.getURLs();
        for(URL url : urLs){
            System.out.println(url);
        }

也可以這樣獲取

// 查看加載器位置
System.out.println(System.getProperty("sun.boot.path"));
System.out.println(System.getProperty("java.ext.dirs"));
System.out.println(System.getProperty("java.class.path"));

同一個類加載器加載同樣的類只會有一個類

 MyTest16 loader1 = new MyTest16("loader1");
 MyTest16 loader2 = new MyTest16("loader2");
 Class<?> clazz1 = loader1.loadClass("com.yshuoo.jvm.classloader.MyTest1");
 Class<?> clazz2 = loader2.loadClass("com.yshuoo.jvm.classloader.MyTest1");
 System.out.println(clazz1 == clazz2);

上面的MyTest1都是由系統類加載器加載的,所以輸出true

接下來我們新建一個類

public class MyPerson {

    private MyPerson myPerson;

    public void setMyPerson(Object myPerson) {
        this.myPerson = (MyPerson)myPerson;
    }
}

執行下面的代碼

Object o1 = clazz1.newInstance();
Object o2 = clazz2.newInstance();

Method method = clazz1.getMethod("setMyPerson", Object.class);
method.invoke(o1,o2);

未完待續。。

微信公衆號:二虎程序

源碼地址:https://github.com/TigerTurbo/jvm_lecture/blob/master/src/main/java/com/yshuoo/jvm/classloader/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章