一个面试问题:java classloader里有一个什么模型?

yanical 2015-09-11 01:45:31
准确的来说,我不知道他想问什么。。。我回答是父亲委托?(准确描述应该是双亲委托好像,当时差不多知道面挂了,有点乱)。我答完面试官也不置可否,呵呵,最后我也不知道标准答案是啥啊。
...全文
200 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanical 2015-09-14
  • 打赏
  • 举报
回复
引用 5 楼 yanical 的回复:
[quote=引用 4 楼 jia20003 的回复:] 能问出这种问题的多少有点脑残!
他问完问题,我很疑惑不知道他问什么,然后他很得意的说:”我估计你不知道这个模型~~“。脑残不敢说吧,有点装逼倒是真的。[/quote] 不过这年头面试,谁不装
yanical 2015-09-14
  • 打赏
  • 举报
回复
引用 4 楼 jia20003 的回复:
能问出这种问题的多少有点脑残!
他问完问题,我很疑惑不知道他问什么,然后他很得意的说:”我估计你不知道这个模型~~“。脑残不敢说吧,有点装逼倒是真的。
gloomyfish 2015-09-11
  • 打赏
  • 举报
回复
能问出这种问题的多少有点脑残!
secret32 2015-09-11
  • 打赏
  • 举报
回复
就是双亲委派模型,都是翻译,你的回答也不算错
yanical 2015-09-11
  • 打赏
  • 举报
回复
引用 1 楼 chiweitree 的回复:
你说的没错,就是双亲委派机制,我有自己总结过,你看下....
唉,类加载不说很熟悉,至少做过一年多OSGi,记性差一点记不清,但是怎么工作还是记得的。结果被问的一愣一愣的。
chiweitree 2015-09-11
  • 打赏
  • 举报
回复
你说的没错,就是双亲委派机制,我有自己总结过,你看下: 每个JAVA程序至少拥有三个类加载器 ·引导类加载器 bootstrap ·扩展类加载器 ext ·系统类加载器(应用类加载器)app 引导类加载器负责加载系统类(rt.jar),是虚拟机不可分割的一部分,C实现的,没有对应的classloader 例如String.class.getClassLoader()返回null 扩展类加载器用于从jre/lib/ext目录加载标准的扩展,将jar放入该目录,即使没有任何类路径,扩展类加载器也可以找到其中的各个类 系统类加载器用于加载应用类,有CLASSPATH环境变量或-classpath命令选项设置的类路径中的目录里或JAR文件里查找这些类 在oracle的java语言实现中,扩展类加载器和系统类加载器都是java实现的,都是urlclassloader类的实例 类加载器的层次结构,向上依赖加载的顺序,app会要求ext加载,ext要求bootstrap加载 JAVA的类加载是父类委托机制,先找父类加载,不行再找子类加载 这是为了害怕用户自己定义class文件然后自己写一个类加载器来加载原本应该是JVM自己加载的类,会使JVM混乱和影响用户安全。 URL url = new URL("*.jar"); URLClassLoader ucl = new URLClassLoader(new URL[]{url}); Class<?> cl = ucl.loadClass("xxx.class"); 因为URLClassLoader构造器中没有指定父类加载器,因此ucl的父亲就是系统类加载器 设置线程的加载器 Thread t ..... t.setContextClassLoader(loader); 在指定类加载器的时候会用到 编写自己的类加载器,继承ClassLoader即可,覆盖findClass方法

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧