关于JAVA类加载大家发表一下见解吧

potahai 2010-11-09 04:20:27
编译器加载类要依靠classloader, 而classloader有3个级别
从高到低分别是BootClassLoader(名字可能不准确) , ExtClassLoader, AppClassLoader.

这3个加载器分别对应着编译器去寻找类文件的优先级别和不同的路径:
BootClassLoader对应jre/classes路径,是编译器最优先寻找class的地方
ExtClassLoader对应jre/lib/ext路径,是编译器次优先寻找class的地方
AppClassLoader对应当前路径,所以也是编译器默认找class的地方

Class.forName(className);
Thread.currentThread().getContextClassLoader().loadClass(className)
两种方式优缺点大家发表下
...全文
97 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
potahai 2010-11-10
  • 打赏
  • 举报
回复
谢谢,诸位。 今天下班前结贴。。。
potahai 2010-11-10
  • 打赏
  • 举报
回复
人真少。。。。
Jlins 2010-11-09
  • 打赏
  • 举报
回复
还是希望你能多看下 <<深入虚拟机>>
houjin_cn 2010-11-09
  • 打赏
  • 举报
回复
在没有多个ClassLoader的应用中,用起来一样的,没有区别;

确定要使用的类在当前类的ClassLoader中可见就用Class.forName(className);
否则
Thread.currentThread().getContextClassLoader().loadClass(className);
龙四 2010-11-09
  • 打赏
  • 举报
回复
《深入Java虚拟机》第二版第八章“连接模型”,60多页讲这个问题,一两句也没办法说清楚
potahai 2010-11-09
  • 打赏
  • 举报
回复
明儿个结贴 大家 都发表下自己的看法
houjin_cn 2010-11-09
  • 打赏
  • 举报
回复
1)Class.forName(className); 与调用者相关
2)Thread.currentThread().getContextClassLoader().loadClass(className) 与线程相关

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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