A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Simple_love 于 2013-10-27 22:56 编辑

先写个继承java.net.URLClassLoader的类,如下
  1. package kite.jvm;

  2. import java.net.URL;
  3. import java.net.URLClassLoader;

  4. public class OneURLClassLoader extends URLClassLoader {
  5. // 类加载器的parent默认为系统AppClassLoader.
  6. public OneURLClassLoader(URL[] urls) {
  7. super(urls);
  8. }
  9. // 使用父类的findClass(String name)方法加载类.
  10. public Class findClass(String name) throws ClassNotFoundException {
  11. return super.findClass(name);
  12. }
  13. }
复制代码
接下来写个接口,如下:
  1. package kite.jvm;

  2. public interface OneInterface {}
复制代码
紧接着写个实现上面接口的一个类,如下:
  1. package kite.jvm;

  2. public class Constant implements OneInterface {}
复制代码
写个含main方法的类测试下,如下:
  1. package kite.jvm;

  2. import java.net.URL;

  3. public class Run {
  4. public static void main(String[] args) throws Exception {
  5. // class字节码所在的位置.
  6. String dir = "file:/Development/workspace/jvm/bin/";
  7. URL url = new URL(dir);
  8. OneURLClassLoader oucl = new OneURLClassLoader(new URL[]{url});
  9. // 用类加载器加载kite.jvm.Constant并返回它的class对象.
  10. Class c = oucl.findClass("kite.jvm.Constant");
  11. // 根据class对象c实例化一个对象,用它的接口类型(OneInterface)做类型转换.
  12. OneInterface instance1 = (OneInterface) c.newInstance();
  13. // 根据class对象c实例化一个对象,用它的实际类型(Constant)做类型转换.
  14. //Constant instance2 = (Constant) c.newInstance();
  15. System.out.println(instance1);
  16. //System.out.println(instance2);
  17. }
  18. }
复制代码
如果打开注释掉的那两条代码,运行结果打印如下:
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)


问题:解释下异常的出现,在此情景中接口和实际类型转化的区别

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
楼主你好,如果问题已解决请将帖子状态修改为提问结束,

如果未解决请继续提问,谢谢合作

修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马