关于ClassLoader理论问题请教

JevonCode 2014-04-30 11:41:29

强制转换为接口ICounter就不会报错,强制转换为自己Counter就报错ClassCastException.


用-verbose:class看它加载的class也没什么区别,请问该怎么解释这个问题好呢?

另外想结交些立志同道合之士一起探究Java的世界。我的QQ1401145025
...全文
127 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
JevonCode 2014-05-03
  • 打赏
  • 举报
回复
OK,理解了,结贴!
Jin_Rocky 2014-05-03
  • 打赏
  • 举报
回复
引用 5 楼 u012863841 的回复:
OK,理解了,结贴!
楼主把理解的分享一下吧
JevonCode 2014-05-02
  • 打赏
  • 举报
回复
引用 3 楼 fanslate 的回复:
[quote=引用 2 楼 u012863841 的回复:] [quote=引用 1 楼 fanslate 的回复:] 应该不是同一ClassLoader加载的,就是 (Counter) 和 tmp.loadClass("....Counter") 这两个。所以说一般应该先给父类加载器加载,找不到再自己加载
是的,是由于不同的ClassLoader而导致异常,但是为什么强制转换 ICounter 接口,就不会报异常呢?这个该怎么解释呢~~~[/quote]在这里只有tmp.loadClass的返回的这一个Counter是自定义类加载器加载的,其他的Counter和其他所有的类都是使用系统默认的类加载器[/quote] 谢谢你这么支持,你所说的“其他的Counter是使用系统默认的类加载器”,对,我这么想,但是我又不理解:什么叫其他Counter,我的Counter都是由工厂类CounterFactory生成的。所以CounterFactory生产的Counter是由URLClassLoader加载,我理解。但又哪来了个Counter需要系统默认加载器去加载。There must be something I am missing o(╯□╰)o
byourfan 2014-05-01
  • 打赏
  • 举报
回复
应该不是同一ClassLoader加载的,就是 (Counter) 和 tmp.loadClass("....Counter") 这两个。所以说一般应该先给父类加载器加载,找不到再自己加载
byourfan 2014-05-01
  • 打赏
  • 举报
回复
引用 2 楼 u012863841 的回复:
[quote=引用 1 楼 fanslate 的回复:] 应该不是同一ClassLoader加载的,就是 (Counter) 和 tmp.loadClass("....Counter") 这两个。所以说一般应该先给父类加载器加载,找不到再自己加载
是的,是由于不同的ClassLoader而导致异常,但是为什么强制转换 ICounter 接口,就不会报异常呢?这个该怎么解释呢~~~[/quote]在这里只有tmp.loadClass的返回的这一个Counter是自定义类加载器加载的,其他的Counter和其他所有的类都是使用系统默认的类加载器
JevonCode 2014-05-01
  • 打赏
  • 举报
回复
引用 1 楼 fanslate 的回复:
应该不是同一ClassLoader加载的,就是 (Counter) 和 tmp.loadClass("....Counter") 这两个。所以说一般应该先给父类加载器加载,找不到再自己加载
是的,是由于不同的ClassLoader而导致异常,但是为什么强制转换 ICounter 接口,就不会报异常呢?这个该怎么解释呢~~~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧