獲取類加載器的加載路徑
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/