ClassCastException是什么意思?
ClassCastException是指类转换异常,也就是说:将一个不是该类的实例转换成这个类就会抛出这个异常。
ClassCastException是JVM在检测到两个类型间转换不兼容时引发的运行时异常,此类错误通常会终止用户请求。
ClassCastException的原因?
产生ClassCastException的原因主要就是:类型转化错误。
比如:一个类是数字类,由于误操作错误的将数字类转换成字符串类的,从而产生了异常ClassCastException。
具体示例如下:
Integer count=100;
你采用:
(String)count;
就会报错了,以为它们类型不一样,转换就会产生错误,就会抛出具体的ClassCastException异常。
ClassCastException异常就会提示:不能把Integer类型的转化为String类型的,如下图所示:
ClassCastException的解决方案?
ClassCastException的解决方案:最好是在类型转换前加上 instanceof进行判断,给引用变量做类型的校验。
instanceof的作用:判断前面的对象是否属于后面的类,或者属于其子类,如果是返回 true,不是返回 false。
格式如下:
变量名 instanceof 数据类型
instanceof具体示例如下:
1.先定义类
abstract class Animal { abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("吃鱼"); } public void catchMouse() { System.out.println("抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨头"); } public void watchHouse() { System.out.println("看家"); } }
2.采用instanceof判断
public class Test { public static void main(String[] args) { // 向上转型 Animal a = new Cat(); // 调用的是 Cat 的 eat a.eat(); // 向下转型 if (a instanceof Cat) { Cat c = (Cat)a; c.catchMouse(); } else if (a instanceof Dog) { Dog d = (Dog)a; d.watchHouse(); } } }
只要是向下转型,一定要先用instanceof判断,再进行转换,切记!
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》