java.lang.ClassCastException是类类型转换异常.一般在传入对象或者多态向下转型时会经常遇到!
那么如何正确预防呢?由此就需要了解一个运算符instanceof啦!
运算符instanceof会在运行阶段动态判断引用指向的对象的类型.
instanceof运算符的运算结果只能是true或者false.
instanceof语法: (引用 instanceof 类名);? ? ? ? ? ? ? ? ? ? ? ? 引用的介绍在这里!------->引用
例如(c instanceof Cat)其中c是一个引用,c变量保存了内存地址指向了堆中的对象.
如果运算结果是true,那么c引用指向的堆内存中的Java对象就是一个Cat.如果运算结果是false,那么c引用指向的堆内存中的Java对象就不是一个Cat.
public abstract class Animal {
String name;
int age;
public abstract void eat();
}
class Birld extends Animal{
@Override
public void eat() {
System.out.println("啄玉米!");
}
public void move() {
System.out.println("在天空任意飞翔!");
}
}
class Cat extends Animal{
@Override
public void eat() {
System.out.println("吃猫粮!");
}
}
public class InstanceofTest {
public static void main(String[] args) {
Animal a=new Cat();
a.name="大咪";
a.age=2;
a.eat();
//此时想调用鸟类的特有方法,进行向下转型.这个时候就很容易出错
Birld birld= (Birld) a; //此时编译不会报错,但是会运行报错,出现类类型转换异常
}
}
此时会出现类类型转换异常!?
?使用instanceof就可以预防这种异常!
public class Test {
public static void main(String[] args) {
Animal a=new Cat();
a.name="大咪";
a.age=2;
a.eat();
Animal b=new Birld();
//此时想调用鸟类的特有方法,进行向下转型.这个时候就很容易出错
//Birld birld= (Birld) a; //此时编译不会报错,但是会运行报错,出现类类型转换异常
if (b instanceof Birld) {
Birld birld= (Birld) b;
birld.move();
} else {
System.out.println("您传入的对象不正确!");
}
}
}
(小编也在努力学习更多哟!以后会多多分享哒!)
希望对友友们有所帮助!!!!
|