对象的类型转换(向上和向下转型)以及ClassCastException

          ClassCastException,字面上来看就是类型转换异常,让我们来先看一下API中的叙述。

ClassCastException继承了RuntimeException,是java异常体系中的非检查异常,也叫做运行时异常。

说到这里很多刚开始学习java的同学可能不太了解java的异常体系,可以看一下我的其他博客,这里就不详细叙述了。

可能很多人在写代码的过程中出现过这个异常,那么这个异常到底是怎么回事呢?

这里用一个代码来说明 

这个代码很简单,就是说男人是人,女人也是人,这里没有任何问题。

问题就出在了第12行代码,女人是男人,就是因为这行代码出现了我们所说的ClassCastException

ClassCastException就是进行强制类型转换时的异常。本身对象其实也是一种数据类型,属于引用数据类型,也存在着数据类型的转换。

对象的向上转型:父类 父类对象 = 子类实例

对象的向下转型:子类 子类对象 = (子类)父类示例

向上转型是自动进行的,而向下转型是要强制进行的,就是所说的强制类型转换。

对象的向上和向下转型也提现了java的多态。但是这样的转换只是存在于父类和子类之间。

两个没有关系的类对象是不能够进行转型的,一定会产生ClassCastException。

遇到ClassCastException时如何去解决,首先需要知道对象(obj)的类型

可以通过obj.getClass().getName()得到具体的类型,可以通过输出语句输出这个类型,然后根据类型进行进行具体的处理。

也可以利用instanceof关键字,obj instanceof 类名 ,根据返回的boolen类型判断这个对象是否为这个类的实例。

总结ClassCastException就是两个没有关系的对象进行强制转换出现的异常。

ClassCastException在JDK1.5之后泛型的引入后得到了很好的解决。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值