iteye_8347 2012-01-01 03:01
浏览 1618
已采纳

使用类加载器java.net.URLClassLoader时的奇怪问题?

先写个继承java.net.URLClassLoader的类,如下:
[code="java"]
package kite.jvm;

import java.net.URL;
import java.net.URLClassLoader;

public class OneURLClassLoader extends URLClassLoader {
// 类加载器的parent默认为系统AppClassLoader.
public OneURLClassLoader(URL[] urls) {
super(urls);
}
// 使用父类的findClass(String name)方法加载类.
public Class findClass(String name) throws ClassNotFoundException {
return super.findClass(name);
}
}
[/code]
接下来写个接口,如下:
[code="java"]
package kite.jvm;

public interface OneInterface {}

[/code]
紧接着写个实现上面接口的一个类,如下:
[code="java"]
package kite.jvm;

public class Constant implements OneInterface {}

[/code]
好了,写个含main方法的类测试下,如下:
[code="java"]
package kite.jvm;

import java.net.URL;

public class Run {
public static void main(String[] args) throws Exception {
// class字节码所在的位置.
String dir = "file:/Development/workspace/jvm/bin/";
URL url = new URL(dir);
OneURLClassLoader oucl = new OneURLClassLoader(new URL[]{url});
// 用类加载器加载kite.jvm.Constant并返回它的class对象.
Class c = oucl.findClass("kite.jvm.Constant");
// 根据class对象c实例化一个对象,用它的接口类型(OneInterface)做类型转换.
OneInterface instance1 = (OneInterface) c.newInstance();
// 根据class对象c实例化一个对象,用它的实际类型(Constant)做类型转换.
//Constant instance2 = (Constant) c.newInstance();
System.out.println(instance1);
//System.out.println(instance2);
}
}

[/code]
如上代码运行结果打印如下:
[code="java"]
kite.jvm.Constant@b6e39f
[/code]
如果打开注释掉的那两条代码,运行结果打印如下:
[code="java"]
Exception in thread "main" java.lang.ClassCastException: kite.jvm.Constant cannot be cast to kite.jvm.Constant
at kite.jvm.Run.main(Run.java:12)
[/code]
问题:解释下异常的出现,在此情景中接口和实际类型转化的区别?先谢谢大家了。
注:附件里是源代码。

  • 写回答

6条回答 默认 最新

  • iteye_16709 2012-01-03 15:28
    关注

    http://www.iteye.com/topic/98178 这个不错 那篇很系统 javaEye就是有很多java牛人。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧