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之后泛型的引入后得到了很好的解决。