请教大家一些ClassLoader的问题

问题描述

Thread t = new Thread() {public void run() {try {Class.forName("test.User");} catch (ClassNotFoundException e) {e.printStackTrace();}System.out.println("child thread:"+ Thread.currentThread().getContextClassLoader());}};t.setContextClassLoader(null);t.start();我在这个线程启动之前把context类加载器设置为bootstrap了,那么run方法第一句加载test。User为什么会成功呢?bootstrap加载器没有父加载器了,它尝试加载User类,而这个类是我自己写的,不是在rt.jar中的,那么为什么会成功加载呢?User类不应该由应用加载类加载的吗?2.还有一个问题,是core java下册中的内容,我不清楚是不是译者的翻译没有到位的问题,他说:偶尔,你也会需要干涉和指定类加载器,考虑下面的例子:*你的应用代码包含一个助手方法,他要调用Class.forName(classNameString)*这个方法是从一个插件类中被调用的。*而classNameString指定的正是一个包含在这个插件的jar中的类。我想象的代码结构可能是这样的。Class Test{ main(){ Util.foo(); }}class Util{ public static void foo(){ Class.forName(classNameString); }}然后他说,插件的作者很合理的期望这个类应该被加载,但是,助手方法的类是由系统类加载器(即应用类加载器)加载的。这正是Class.forName所使用的类加载器。而对于他来说,在插件JAR中的类是不可视的,这种现象称为类加载器倒置。我最后一句话没读懂,如果在eclipse下把插件的jar build进来,不就可以访问到插件中的类了吗?为什么要干涉和指定类加载器? 问题补充:恩,我一开始以为contextClassLoader设置好后,线程就会使用这个loader去加载类了,没想到contextClassLoader原来是给容器用的,java core实现中几乎不使用它。第二个问题我也搞明白了。RednaxelaFX 写道

解决方案

sakop 写道没想到contextClassLoader原来是给容器用的,java core实现中几乎不使用它。第二个问题我也搞明白了。 不啊,Java的核心库里有不少使用了service provider机制的地方都使用到了context class loader。可以留意一下包名是spi结尾的那些。
解决方案二:
第一个问题很好办。Class.forName(className)使用的是“currentLoader”,也就是当前方法所在的类的加载器,而不是context class loader。所以设置context class loader为null完全不影响这个调用。查一下JavaDoc吧。后一问题得看原文…现在手上没这本书回答不了。分数留给后面回答的人了 ^_^

时间: 2024-09-18 03:56:55

请教大家一些ClassLoader的问题的相关文章

请教下swing中怎么遍历checkbox控件并获取它们的值

问题描述 请教下swing中怎么遍历checkbox控件并获取它们的值 解决方案 解决方案二:什么叫遍历jcheckbox?你的需求或者说你想要达到什么样的目的,现在你又是如何组织的?描述的详细些吧解决方案三:publicstaticArrayList<JCheckBox>getAllJCheckBox(Containerct,ArrayList<JCheckBox>list){if(list==null){list=newArrayList<JCheckBox>();

请教各位算法大神,acm一道题:赋权无向图的最小权值遍历用什么算法(存在负权值)?

问题描述 请教各位算法大神,acm一道题:赋权无向图的最小权值遍历用什么算法(存在负权值)? 1C 如题,问题是这样的:有一赋权无向连通图,可以从任意一结点出发,求遍历所有结点的最小权值路线.结束点也是任意的,每个节点也没有访问次数的限制,但必须每个节点都要被访问到.,想问一下用什么算法呢? 解决方案 可以参考djstera算法,求最短路径~借鉴其中的标记功能,只不过结束状态标志是所有节点均已遍历. 解决方案二: 可以参考djstera算法,求最短路径~借鉴其中的标记功能,只不过结束状态标志是所

请教 Asterisk 服务器架设

问题描述 请教 Asterisk 服务器架设 大家好,请教一个Asterisk的问题. 由于项目测试的目的,需要在公网架设一个Asterisk服务器,作为VoIP的服务器.需要支持ICE协议,穿越对称式NAT(Symmetric NAT). PC客户端使用SIP通讯软件,实现在不同NAT的语音和视频对话. 希望Asterisk 配置经验的朋友,多多指教! 解决方案 参考:http://www.360doc.com/content/13/0827/11/13654078_310207980.sht

请教 自己写的mysqli 操作数据库的类 DB.class.php

问题描述 请教 自己写的mysqli 操作数据库的类 DB.class.php 类是这样写的: <?php class DB{ //属性 private $host; private $port; private $name; private $pass; private $dbname; private $prefix; //设置表前缀 private $charset;//设置字符集 private $mysqli; //设置mysqli类对象 //设置构造函数 public functio

html-CSS关于div布局的小问题,请教了,谢谢

问题描述 CSS关于div布局的小问题,请教了,谢谢 <head> <style> .ABC{width:100px; height:100px; background:red; margin:auto; margin-left:20px;} </style> </head> <body> <div class="ABC"></div> </body> </html> 为什么居中

svg-我copy一个网页 它的icomoon的图标弄不下来 想请教去哪下这几个字体库

问题描述 我copy一个网页 它的icomoon的图标弄不下来 想请教去哪下这几个字体库 @font-face { font-family:'icomoon'; src:url(IcoMoon-Free-master/icomoon-MBT.eot); src:url(IcoMoon-Free-master/icomoon-MBT.eot?#iefix) format(""embedded-opentype"")url(IcoMoon-Free-master/ico

算法-递归问题,学习请教?求高人指点?字数够了吧!!!

问题描述 递归问题,学习请教?求高人指点?字数够了吧!!! 今天研究了一些递归程序,简单点的递推过程还能想明白执行过程,复杂的就整不明白了,请问各位大神们需要认真的研究递归过程吗?是不是会用就行了啊?

html-本人菜鸟一枚,请教大神一个关于CSS中ID和类选择器不能用,而标签选择器能用的问题

问题描述 本人菜鸟一枚,请教大神一个关于CSS中ID和类选择器不能用,而标签选择器能用的问题 FIREFOX浏览器,代码如下: HTML代码片段: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> @import url(template/default/styl

c++类的序列化问题请教

问题描述 c++类的序列化问题请教 各位大神,小弟需要将一个c++类序列化为json来进行网络传输,有一个小小问题想请教一下,我在网上查了一下,很多都说要用jsoncpp.看了很久还是不知道这个序列化的方法. 现在假设我有一个类如下: class A { public: int A; void hello(); } 请问我要怎么进行序列化呢 解决方案 简单的话,直接拼接字符串就可以了. 解决方案二: 序列化使用jsoncpp或者之类的库,还是需要自己写序列化代码的 参考:http://qiusu