java.lang.ClassCastException(类型强制转换异常) 运行时异常,继承自RuntimeException
1.首先对java.langClassCastException异常产生的原因进行分析。为什么会产生这种异常?
举例:
1.创建Animal类默认继承Object类
package com.apesource.demo01;
//创建Animal类默认继承Object类
public class Animal {
}
2.创建Dog类继承自Animal类
package com.apesource.demo01;
//创建Dog类默认继承Animal类
public class Dog extends Animal {
}
3.创建Person类继承自Animal类
package com.apesource.demo01;
//创建Person类继承自Animal类
public class Person extends Animal {
}
4.创建Student类继承自Person类
package com.apesource.demo01;
//创建Student类继承自Person类
public class Student extends Person {
}
5.创建Teacher类继承自Person类
package com.apesource.demo01;
//创建Teacher类继承自Person类
public class Teacher extends Person {
}
6.创建main()方法 编写如下代码,有详细讲解,可以细读。
package com.apesource.demo01;
public class Main {
public static void main(String[] args) {
Animal a = new Dog(); //Animal类型的引用指向Dog类的对象 可以解读为狗是一个动物 说法正确,有此关系
Dog d = (Dog)a; //Dog类型的引用指向Dog类型的对象 可以解读为狗动物是狗 说法正确,有此关系
//Person类型的引用指向Dog类型的对象 可以解读为狗动物是人 说法错误,无此关系
// Person pp = (Person)a; //Exception in thread "main" java.lang.ClassCastException: com.apesource.demo01.Dog cannot be cast to com.apesource.demo01.Person
// at com.apesource.demo01.Main.main(Main.java:9)
Animal a1 = new Student(); //Animal类型的引用指向Student类的对象 可以解读为学生是一个动物 说法正确,有此关系
Person p = (Person)a1; //Person类型的引用指向Student类的对象 可以解读为学生是动物是人 说法正确,有此关系
Student s = (Student)p; Person类型的引用指向Student类的对象 可以解读为学生是动物是老师 说法正确,有此关系
//Teacher类型的引用指向Student类型的对象 可以解读为学生是动物是老师 说法错误,无此关系
// Teacher t = (Teacher)p; //Exception in thread "main" java.lang.ClassCastException: com.apesource.demo01.Student cannot be cast to com.apesource.demo01.Teacher
// at com.apesource.demo01.Main.main(Main.java:17)
Object o = new Teacher(); //Object类型的引用指向Teacher类的对象 可以解读为老师是一个Object的子类 说法正确,有此关系
Animal a2 = (Animal)o; //Animal类型的引用指向Teacher类的对象 可以解读为老师是一个Object的子类是动物 说法正确,有此关系
Person p1 = (Person)a2; //Person类型的引用指向Teacher类的对象 可以解读为老师是一个Object的子类是动物是人 说法正确,有此关系
Teacher t1 = (Teacher)p1; //Teacher类型的引用指向Teacher类的对象 可以解读为老师是一个Object的子类是动物是人是老师 说法正确,有此关系
//Student类型的引用指向Teacher类型的对象 可以解读为老师是学生 说法错误,无此关系
// Student s1 = (Student)p1; //Exception in thread "main" java.lang.ClassCastException: com.apesource.demo01.Teacher cannot be cast to com.apesource.demo01.Student
// at com.apesource.demo01.Main.main(Main.java:26)
}
}
总结:
由上述诸多举例可知,java.lang.ClassCastException是进行强制类型转换的时产生的异常, 强制类型转换的前提是父类引用指向的对象的类型是子类的时候才可以进行强制类型转换,如果父类引用指向的对象的类型不是子类的时候将产生java.lang.ClassCastException异常(类型强制转换异常)。
2.遇到类似问题该如何解决:
①,通过if(对象 instanceof 类型)的语句来判断对象的类型是什么。
②,通过对象.getClass().getName()得到具体的类型,可以通过输出语句输出这个类型,即System.out.println(对象.getClass().getName()); 然后根据类型进行进行具体的处理。
感谢阅读~