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

Java类型转换异常的案例 java中类型转换异常_父类

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

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

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

这里用一个代码来说明 

Java类型转换异常的案例 java中类型转换异常_子类_02

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

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

ClassCastException就是进行强制类型转换时的异常。

Java类型转换异常的案例 java中类型转换异常_java_03

本身对象其实也是一种数据类型,属于引用数据类型,也存在着数据类型的转换。

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

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

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

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

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

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

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

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

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

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