一道关于ClassLoader的面试题

wingardium wingardium 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
请看如下代码, 先不要运行, 说出程序会输出什么?


import java.net.*;

public class Andromeda {
private static final Andromeda instance = new Andromeda();

private Andromeda(){

}

public static Andromeda getInstance(){
return instance;
}

public static void main(String[] args) throws Exception{

URLClassLoader loader1 = new URLClassLoader(new URL[]{new URL("file:///home/root/workspace/andromeda/bin/")}){
public String toString(){
return "loader1";
}
};

URLClassLoader loader2 = new URLClassLoader(new URL[]{new URL("file:///home/root/workspace/andromeda/bin/")},
ClassLoader.getSystemClassLoader().getParent()){
public String toString(){
return "loader2";
}
};

Class clazz1 = loader1.loadClass("Andromeda");
Class clazz2 = loader2.loadClass("Andromeda");

Andromeda obj1 = (Andromeda)(clazz1.getDeclaredMethod("getInstance", new Class[0]).invoke(null, new Object[0]));
System.out.println(loader1 + " loads " + obj1);

Andromeda obj2 = (Andromeda)(clazz2.getDeclaredMethod("getInstance", new Class[0]).invoke(null, new Object[0]));
System.out.println(loader2 + " loads " + obj2);

Andromeda obj3 = Andromeda.getInstance();
System.out.println(Andromeda.class.getClassLoader() + " loads " + obj3);
}
}

...全文

相关推荐

评论 13
收藏 已收藏
分享
返回顶部
wingardium
Java SE 62,621 成员 307,251 内容