一道关于ClassLoader的面试题
请看如下代码, 先不要运行, 说出程序会输出什么?
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);
}
}
...全文
相关推荐
定义ClassLoader调用外部jar包
NULL 博文链接:https://fly-hyp.iteye.com/blog/296625
classloader
classloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloaderclassloader
面试题:Class.forName 和 ClassLoader 有什么区别?.docx
图文并茂吃透面试题,看完这个,吊打面试官,拿高薪offer!
JVM ClassLoader简析
JVM ClassLoader简析.压缩包中文档和示例代码
ClassLoader小例子
java类加载器的小例子程序,大家可以参看我的博文


Java SE
