ClassCastException原因及解决方法(附解决方案代码示例)

ClassCastException原因及解决方法(附解决方案代码示例)-mikechen

ClassCastException是什么意思?

ClassCastException是指类转换异常,也就是说:将一个不是该类的实例转换成这个类就会抛出这个异常。

ClassCastException是JVM在检测到两个类型间转换不兼容时引发的运行时异常,此类错误通常会终止用户请求。

 

ClassCastException的原因?

产生ClassCastException的原因主要就是:类型转化错误。

比如:一个类是数字类,由于误操作错误的将数字类转换成字符串类的,从而产生了异常ClassCastException。

具体示例如下:

Integer count=100;

你采用:

(String)count;

就会报错了,以为它们类型不一样,转换就会产生错误,就会抛出具体的ClassCastException异常。

ClassCastException异常就会提示:不能把Integer类型的转化为String类型的,如下图所示:

ClassCastException原因及解决方法(附解决方案代码示例)-mikechen

 

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面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法