关于java 类加载器

http://www.ibm.com/developerworks/cn/java/j-lo-classloader/index.html 这篇文章对于类加载器的知识写得已经非常

到位了。不过我看的时候还有些思路理不顺的地方。我把其中的疑问以及思考的过程记录下来:

 

1.new的时候使用的是什么类加载器?

 

  答:这个问题其实非常的弱智,能被它蒙住算我倒霉。类加载器加载的是类(class),是一个类型。而new的是对象,是某个

        具体类型的实例。这是完全不同的两个过程。想象加载器的工作场景,见如下代码:

 

       

         A的字节码被虚拟机加载的时候,发现A类中引用了B和C的两个类,所以虚拟机就用加载了A类的类

         加载器加载了B和C这两个类型。不管B或C被new了几千,几万个,他们的类型也只会被加载一次,

         然后缓存起来。

 

 

2.线程上下文类加载器有什么用处?有哪些典型的应用场景?

 

   答:看这篇文章讲线程上下文加载器的时候没怎么看懂。它上面说如果B接口是由引导类加载器加载的

         java核心类,而我们自己写的A类实现B的接口的话,并且A类是存在于classpath中,由系统类加    

         载器加载,那么会问题。

         我想了,继承或实现java核心类库这种程序形式太普通了。我怎么从来没碰过问题?

         后来想通了,拿JNDI举例了。jndi包里的context是核心类,是由引导类加载器加载,当我们用

         context.looup(classname)某个classpath中类包的类B时,虚拟机根据类加载原则,仍然用引导

         类加载器去加载B。这不就错了吗!!它哪儿找得找啊。。。。

         所以这种情况就使用线程上下文加载器,因为它默认是使用系统类加载器的。这样就解决问题了

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值