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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏孟永辉

马云退休,一个全新的互联网时代或将开始

今天,马云退休的消息无疑是一个焦点。对于马云退休的原因,外界依然有很多的猜测。几乎可以确定的是,未来马云将会从事自己心仪的教育事业,并将会持续发挥自己在教育事业...

14520
来自专栏孟永辉

BAT、TMD加持新技术背景下,互联网家装如何蝶变新生?

几乎所有的“互联网+”模式都存在同样的问题,那就是对于行业内在运行逻辑改造的无力与浅层。互联网家装同样如此。我们看到,尽管互联网家装改变了人们获取用户的方式和手...

8210
来自专栏孟永辉

共享单车落幕:上海凤凰诉ofo或在情理之中

共享单车浩浩荡荡的发展历程伴随着资本的退却而最终落幕。尽管共享单车市场上摩拜投身美团总算是有了一个好归宿,哈罗单车对于三四线的深度布局实现了逆袭,ofo依然在仗...

8810
来自专栏孟永辉

恒大入主法拉第,FF91真的要来了吗?

自恒大入主法拉第之后,FF91落地的步伐似乎开始逐步加快。在许家印到法拉第公司考察之后,FF91在落地到中国的步伐更加快速。就在上周,恒大法拉第未来智能汽车集团...

7920
来自专栏孟永辉

或许,9月12日的苹果新品发布会依然会让人失望!

正如每一次的苹果邀请函都带给我们不一样的感受一样,今年9月12日的苹果发布会的邀请函依然让我们浮想联翩。这或许是苹果以往营销套路的延续——通过给人一个极具想象力...

10720
来自专栏孟永辉

饿了么并入口碑,一场“非典型”新零售大战的开始

如果你了解互联网巨头的套路,你就会发现他们会不断用资本的力量去拓展自己的势力范围,并且建构一个能够将人们所有的生活场景全部都囊括其中的生态体系。饿了么并入口碑仅...

8410
来自专栏孟永辉

任性的苹果,任性的库克

或许在人类历史上还没有哪一个科技公司会像苹果般任性,任性到可以不顾及用户的感受。随着苹果发布会的新鲜“上线”,我们再次见识到了苹果的任性。价格再度刷新史上最高、...

11010
来自专栏孟永辉

锤子手机推“无限屏”新机:让我们为老罗的创新点赞

人们对于锤子手机的发布会的期待其实更多的是在看罗永浩的“单口相声”。无论锤子手机如何,观众依然能够在锤子手机发布会上过一回嘴瘾。罗永浩对于自己,对于友商,对于行...

13050
来自专栏跟着阿笨一起玩NET

Assembly.Load()方法,Assembly.LoadFrom()方法,Assembly.LoadFile()方法的区别!

         这个方法通过程序集的长名称(包括程序集名,版本信息,语言文化,公钥标记)来加载程序集的,会加载此程序集引用的其他程序集,一般情况下都应该优先...

68310
来自专栏孟永辉

拼多多、趣头条上市,反驳消费升级的无效样本

最近,有关消费升级与消费降级的讨论一直都没有停止过。作为一个新的风口和方向,人们对于消费升级和消费降级的谈论无可厚非,因为只有深入讨论才能找到合适的发展方向。但...

7310

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励