Java Class Loader

Java中有三种ClassLoader

 

1. Bootstrap class loader:

    用于加载java语言规范所定义的标准库的类,比如String,ArrayList,Object等。   

    它通常是在虚拟机种用本地代码(如C)实现,在系统中用null表示。

    这里之所以返回null,与其说是技术原因,到不如说更多得是出于安全考虑。

    试想,如果我们能够获得这个ClassLoader的引用,那么我们就可以自由的加载或卸载语言标准类的实现了。

 

2. Extension class loader:

    负责加载Java语言可选实现的类。

    我机器上的"Java环境中安装的可选包(optional package)"在这个路径中:

    D:\DevelopingTools\Java\jdk1.6.0\jre\lib\ext

    因此这里面的java包中的类,都会由Extension class loader来加载。

    另外:sun,ibm等不同厂商的扩展包会不同。

 

3. Application class loader:

   剩下的,由我们写的,或者由我们引用的类,也就是CLASSPATH上的类有这个加载器加载。

   有时候也称为system class loader,Java程序可以通过调用java.lang.getSystemClassLoader()获得它的引用。

 

上面的讨论也说明了 Java中获取classpath路径下的资源文件 这篇blog中的原因。

应外,关于这些加载器的关系以及调用次序可以参考这篇blog Java Class Loader

 

这里给出一段测试代码来解释这三个ClassLoader(By L同学),跑在sun jdk 1.6上:

 

public class TestClassLoader {
	public static void main(String[] args) {
		Object o = new Object();
		System.out.println(o.getClass().getClassLoader());
		System.out.println(sun.security.pkcs11.Secmod.class.getClassLoader());
		System.out.println(TestClassLoader.class.getClassLoader());
	}
}
 

他的输出为:

 

写道
null
sun.misc.Launcher$ExtClassLoader@3e25a5
sun.misc.Launcher$AppClassLoader@1a46e30
 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值