看了很多类装载的例子, 一直找吥到能解决问题的答案!索性就发个帖子跟大家探讨探讨吧!~ 希望能解开心中的谜团!先回顾下看过的问题:
1. JDK1.2以后, 类装载实行了双亲委派机制! 子类装载器会首先委派父类去装载要装载的类,一直循环往上,。
在这也就吥啰嗦那个委派机制了, 看过的应该差不多都清楚了!问题来了:
public class Object {
public static void main(String [] args) {
Object o = new Object(); //双亲委派哪里去了?
o.print(); //竟然自己的类优先加载了!
}
public void print() {
System.out.println("消灭sun的Object");
}
}
或许有人会回答:你写的这个Object 与那个Object根本就吥是一个类, 那个Object仍然被加载了!它的全名为:java.lang.Object; 回答的一点没错, 但是完全与否目前我也没证明出来, 打印出他们的classLoader发现, 它们是吥一样的, 可是就算是java.lang.Object优先加载了, 我们却无法使用了, 除非连上包名使用, 我们自己写的竟然把lang包里的Object屏蔽掉了! 双亲好像有点无力啊!~ 难道父亲干吥过儿子了?。 呵呵! 长江后浪推前浪啊!2.那么classLoader到底与命名空间有着怎样的联系呢? 于是我深入到lang包去做个实验, 我自己写了个类Test:
package java.lang;public class Test { /**
* @param args
*/
public void print() {
System.out.println("哈哈,我竟然被放在了lang包里");
}}
出奇的发现, 这个类被正常使用了!~ 写一个测试类去测试它,完全没有问题, 我们为lang添加上了自己所写的类, 扩展了!
哈哈!~~~~ 可是再次去打印它们的classLoader, 还是不同的classLoader 没有因为在一个包内, 而改变了classLoader, 而当我去试图覆盖lang包里的类时, 发现吥可能! 除非是自己写的类!这让我之前所想的又变的混乱了!~~~
3.于是我继续接着寻找, 发现有个帖子说, 类装载是一个递归树的展现, 哦? 这个有趣, 看上去好像有那么点说服力,今天晚上太累了, 有时间再接着写, 双亲委派到底是个什么东西, 到现在却是那么的迷茫! 界限是什么! 区别又是什么,
解决方案 »
- DecimalFormat的几个问题
- 数据在jsp上显示的问题!
- bug管理-好东西和大家共享
- Jsp的简单问题。。。急切求助
- 下午没事,初学者写了一个操作数据库的类,直接获取记录集,通过设置参数以及调用存储过程等例子,适合初学者~
- 为什么我打包进字节流..里面每个数据之间会有"0"隔开,也就是null
- 关于JTable事件触发的问题
- 初学者提问!
- 在线等待!!!请教各位同仁,获得当前程序运行时间的对象和方法是什么?
- java 可以使用 可是javac不可以使用。老兄帮帮忙
- java字符串比较问题
- 【向ZangXT提问】System.out.println("hello");创建了几个String对象?
加载哪一个,看谁在CLASSPATH里面先出现。包括jar和.class文件