?父类加载器。
下面用例子进行说明如:
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