前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java.lang.ClassCastException(java强制类型转换异常)

java.lang.ClassCastException(java强制类型转换异常)

作者头像
黑泽君
发布2018-10-11 17:38:47
42.7K0
发布2018-10-11 17:38:47
举报
文章被收录于专栏:黑泽君的专栏黑泽君的专栏

ClassCastException,从字面上看,是类抛出异常,即是类型转换错误,通常是进行强制类型转换时候出的错误。如下图所示:

下面对产生ClassCastException异常的原因进行分析,然后给出这种异常的解决方法。

这种异常是如何产生的呢?

举一个比较形象的例子。

  Animal表示动物类,Dog表示狗类,是动物的子类,Cat表示猫类,是动物的子类。看下面的代码:

  Animal a1 = new Dog();  // 1

  Animal a2 = new Cat();   // 2

  Dog d1 = (Dog)a1;  // 3

  Dog d2 = (Dog)a2;  // 4

第3行代码和第4行代码基本相同,从字面意思看都是把动物(Animal)强制转换为狗(Dog),但是第4行代码将产生java.lang.ClassCastException。

原因是你要把一个猫(a2这只动物是猫)转换成狗,而第3行中是把狗转换成狗,所以可以。

从上面的例子看,java.lang.ClassCastException是进行强制类型转换的时候产生的异常,强制类型转换前提父类引用指向的对象的类型是子类的时候才可以进行强制类型转换,如果父类引用指向的对象的类型不是子类的时候将产生java.lang.ClassCastException异常。

就是上面a1和a2都是动物,但是a1这只动物是一只狗,而a2这只动物是猫,所以要把a1转换成狗可以,因为a1本身就是狗,而a2是一只猫,所以要转换成狗就出错了。

遇到这样的异常的时候如何解决呢?

如果你知道要访问的对象的具体类型,直接转换成该类型即可。即对于上面的例子而言,假如我知道我要访问的对象的具体类型为猫类,那么我就 Cat c = new Cat(); 通过new出来的对象c来调用它的方法。但是呢,一般我们无法确定要访问的对象的具体类型。

如果不能确定类型可以通过下面的两种方式进行处理(假设对象为o):

  1、通过o.getClass().getName()得到具体的类型,可以通过输出语句输出这个类型,即System.out.println(s.getClass().getName()); 然后根据类型进行进行具体的处理。

  2、通过if(o instanceof 类型)的语句来判断o的类型是什么。

多态的相关知识,如下如所示:

参考博文连接: http://blog.51cto.com/liuyh/803625

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档