日期:2014-05-20  浏览次数:20730 次

关于类加载器的相关问题
我最近在看类加载器的相关的内容
我自己按照张孝祥老师的视屏一步一步做了一个类加载器
并在他的基础上做了一个设想,但是设想出现了失败,所以我想请教一下对java有深入研究的
大神给予小弟一个点拨。

我的环境是MyEclipse,用的jdk是我自己下载的JDK1.7

设置的classpath是: .;C:\Users\ZJH\Desktop;%JAVA_HOME%\lib; 

遇到问题的代码是下面的这个代码

 Class clazz = new MyClassLoader("itcastlib").loadClass("cn.itcast.day2.ClassLoaderAttach");

按照常理来说,当运行到这一句的时候,对于cn.itcast.day2.ClassLoaderAttach这个类的加载是先抛给
apploader  然后 Apploader抛给Extloader 然后Extloader是抛给BootStrap来加载,接着就是Bootstrap加载失败,交由Extloader加载,Extloader加载失败,交给Apploader加载,注意了,就是这一步,我不能够理解,
我已经在桌面上建立了一个文件夹,名字是cn,cn文件夹下面是文件夹itcast,itcast文件夹下面是day2文件夹,day2文件夹下面放的是ClassLoaderAttach.class文件。
我们知道AppLoader加载类时是按照classpath来加载的,我们可以看到,我设置的classpath中有C:\Users\ZJH\Desktop这个路径,那么这个AppLoader应该能够找到这个ClassLoaderAttach.class文件的呀,
可是事实表明,AppLoader没有加载到这个class文件,而是由我的自定义的MyClassLoader类加载器加载了我放在另一个地方的一个ClassLoaderAttach.class文件,请问这是为什么?

赏分40~  坐等回复。

谢谢谢谢




Java ClassLoader

------解决方案--------------------
路径不对吧,要记得带包名
------解决方案--------------------
MyClassLoader 怎么写的,是不是打破了父代理?
------解决方案--------------------
你重启一下JVM试试?
------解决方案--------------------

1 - .;C:\Users\ZJH\Desktop;%JAVA_HOME%\lib; 是在IDE中设置的?

2 - 你要加载的 ClassLoaderAttach 类是同一个 project 里面的?

3 - 你在 classpath 中把 "." 放在了桌面路径前面,那就是说,如果在 . 作为 class path 时找到了名称符合的类,那桌面也就不用看了

4 - 我建议你在运行的时候不要用IDE,用console运行试试
------解决方案--------------------
用console运行试试 猜测应该是myeclipse执行路径问题
------解决方案--------------------
JVM在哪个路径下启动,那么,它的class path就是哪个路径。
如果给定的文件路径不是绝对路径,那么它就会在当前启动jvm的路径下去找指定的文件