反射之类加载器详解和委托加载_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 反射之类加载器详解和委托加载

反射之类加载器详解和委托加载

 2010/9/19 22:57:09  he_wen  http://he-wen.javaeye.com  我要评论(0)
  • 摘要:父类加载器。下面用例子进行说明如:publicclassClassLoaderTest{/***@paramargs*/publicstaticvoidmain(String[]args)throwsException{//TODOAuto-generatedmethodstubSystem.out.println(ClassLoaderTest.class.getClassLoader().getClass().getName());System.out.println(System
  • 标签:反射 类加载器详解 委托加载



?父类加载器。

下面用例子进行说明如:

public class ClassLoaderTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		System.out.println(
				ClassLoaderTest.class.getClassLoader().getClass().getName()
				);
		System.out.println(
				System.class.getClassLoader()
				);
}

?

sun.misc.Launcher$AppClassLoader
null

?为什么System为null?这是因为此类事由BootStrap装载器装载,这个装载器是java虚拟机内核写的(用C写的二进制),所有无法有java得到

二、如何得到类加载器之间的关系?

下面的图示类加载器之间的关系图




?
?用代码如何得到他们之间的关系呢?

ClassLoader classLoader=ClassLoaderTest.class.getClassLoader();
        while(classLoader!=null){
            System.out.println(classLoader.getClass().getName());
            classLoader=classLoader.getParent();
        }
        System.out.println(classLoader);

?打印的结果:

?

   sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$ExtClassLoader
null

?先是从子类进行打印然后再到父类,直到BootStrap类加载器

介绍java JDK下的jar文件:如

C:\Program Files\Java\jdk1.6.0_02\jre\lib下有rt.jar文件时JavaAPI中一些容器的类等等,C:\Program Files\Java\jdk1.6.0_02\jre\lib\ext目录是扩展的包,如果产生的jar文件可以放在这个目录下

提出一个问题就是如何让自己编译出来的jar文件,只需要加载通过类加载器

ExtClassLoader不需要AppClassLoader呢?
这样只需要在此类中(Myeclipse下)右击鼠标点击导出,然后选择java->jar文件后,把此类放到jre\lib\ext目录下()

然后上面的代码运行的情况是:

sun.misc.Launcher$ExtClassLoader
null

那为什么ClassLoderTest.class文件不先加载到AppClassLoader加载器呢?

?????????????????? 先看看实例图


如何写自己的类加载器那就需要自己的类需要继承ClassLoader,而ClassLoader的构造函数有一个参数就是自己的类加载器是挂靠在哪个父节点上.详细查看API

发表评论
用户名: 匿名