
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年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。