详细地址参见 ImportNewhtml
http://www.importnew.com/19903.htmljava
重点介绍下类加载的双亲委派模型面试
简介:
双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有本身的父类加载器。这里类加载器之间的父子关系通常不会以继承关系来实现,而是都使用组合关系来复用父加载器的代码code
工做过程:
若是一个类加载器收到了类加载的请求,它首先不会本身去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每个层次的类加载器都是如此,所以全部的加载请求最终都应该传递到顶层的启动类加载器中,只有当父类加载器反馈本身没法完成这个请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试本身去加载htm
好处:
Java类随着它的类加载器一块儿具有了一种带有优先级的层次关系。例如类Object,它放在rt.jar中,不管哪个类加载器要加载这个类,最终都是委派给启动类加载器进行加载,所以Object类在程序的各类类加载器环境中都是同一个类判断两个类是否相同是经过classloader.class这种方式进行的,因此哪怕是同一个class文件若是被两个classloader加载,那么他们也是不一样的类继承
一道面试题:ssl
能不能本身写个类叫java.lang.System
?class
答案:一般不能够,但能够采起另类方法达到这个需求。
解释:为了避免让咱们写System类,类加载采用委托机制,这样能够保证爸爸们优先,爸爸们能找到的类,儿子就没有机会加载。而System类是Bootstrap加载器加载的,就算本身重写,也老是使用Java系统提供的System,本身写的System类根本没有机会获得加载。import
可是,咱们能够本身定义一个类加载器来达到这个目的,为了不双亲委托机制,这个类加载器也必须是特殊的。因为系统自带的三个类加载器都加载特定目录下的类,若是咱们本身的类加载器放在一个特殊的目录,那么系统的加载器就没法加载,也就是最终仍是由咱们本身的加载器加载。搜索