Java 类加载器的一个小实验

已经知道java有三个级别的类加载器,Bootstrap class loader,extension class loader 和 system class loader! 这三个级别的类加载器是以父-子关系来组织的。同时,Bootstrap class loader位于最后级别,system class loader为于最低的级别
简单的说,Bootstrap class loader加载的是jre/classes下类,以及jre/lib下的rt.jar等等。
extension class loader 加载的时候 jre/lib/ext目录下的类包
system class loader 加载的是默认的class路径已经在环境变量中设置的CLASSPATH路径的类
同时,类的加载是运用“委托模式”(delegation model),简单的说,Bootstrap class loader能加载,就Bootstrap class loader加载,如果Bootstrap class loader不能加载,就让extension class loader 加载,如果extension class loader不能加载,就让system class loade加载,如果system class loader也不能加载,就报出ClassNotFoundException
举例来说:
有一Out.java,源代码如下:

public class Out{

public static void main(String[] args) throws Exception{
for(int i=0;i<10;i++){
System.out.println("Test...."+i);
}
}
}

放置在E:\Lesson目录下。
通过命令行格式,进入E:\Lesson目录下,执行
[quote]
java Out
[/quote]
可以得出结果:

Test....0
Test....1
Test....2
Test....3
Test....4
Test....5
Test....6
Test....7
Test....8
Test....9

不更改E:\Lesson目录下的Out.class文件,在别的目录下新建一个Out.java

public class Out{

public static void main(String[] args) throws Exception{

System.out.println("=====this is started by top classloader=====");
}
}

编译后把得到的Out.class放置在jdk的jre/classes目录下(如果没有,新建一个classes目录),
再进入到E:\lesson目录下执行

java Out

得出的:

=====this is started by top classloader=====



可以看出委托模式的加载方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值