【Java】初学instanceof

instanceof关键字用于判断对象是否属于特定类或其子类/实现的接口。在编译阶段,它可以接受对象所属类的子类、父类、同级类或自身类。运行时,返回结果为true当对象是类的实例或实现了接口,否则为false。使用instanceof可在类型转换前进行安全检查,防止运行时异常。接口版本的示例展示了instanceof同样适用于接口的检查。
摘要由CSDN通过智能技术生成
  1. 作用:用于判断某个对象是否是某个特定类或该特定类的一个实例,返回一个布尔类型.
  2. 一般格式 object instanceof class(class可以是类也可以是接口)
  3. 具体使用:

分编译阶段和运行阶段:

在编译阶段:object所属的类可以是class类本类、同级类、父类、子类。

示例:

public class Animal {
    
}
public class Cat extends Animal{

}
public class Dog extends Animal {

}

public class Labrador extends Dog{

}
public class Computer{

}
public class Main {
    public static void main(String[] args) {
        Animal animal=new Dog();
        System.out.println(animal instanceof Dog);//animal所属类是Dog本类
        System.out.println(animal instanceof Cat);//animal所属类是Cat同级类
        System.out.println(animal instanceof Animal);//animal所属类是Animal子类
        System.out.println(animal instanceof Labrador);//animal所属类是Labrador父类
    }
}

以上在编译阶段都没有报错, 但如果判读与之毫无相关的类例如animal instanceof Computer在编译时就会报错。

在运行阶段:

以上运行结果为:

true
false
true
false

 不难看出在运行阶段:object所属的类为class类本类、子类时为true,父类、同级类时为false。

这样以来在类型转换时,例如:Cat cat=(Cat)animal; 如果直接转换就会出现类型转换异常(运行时报错,编译时没有),这时就可以用instanceof判断一下:if(animal instanceof Cat)  Cat cat=(Cat)animal;

接口版本:

public interface Animal {
}
public class Dogimp implements Animal{

}
public class Catimp implements Animal{
}
public class Main {
    public static void main(String[] args) {
        Animal animal=new Dogimp();
        System.out.println(animal instanceof Dogimp);//本
        System.out.println(animal instanceof Catimp);//同级
        System.out.println(animal instanceof Animal);//父
    }
}

运行结果: 

true
false
true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值