Java中instanceof 关键字的使用

 更新时间:2023年10月13日 08:54:48   作者:即使再小的船也能远航  
instanceof通过返回一个布尔值来指出,某个对象是否是某个特定类或者是该特定类的子类的一个实例,本文就来详细的介绍一下instanceof 关键字的使用,感兴趣的可以了解一下

instanceof 通过返回一个布尔值来指出,某个对象是否是某个特定类或者是该特定类的子类的一个实例。

如果 object 是class 的一个实例,则 instanceof 运算符返回 true,如果 object 不是指定类的一个实例,或者object 是null, 则返回false。class 可以是类,可以是接口。

instanceof 在Java 的编译状态 和 运行状态是有区别的:

  • 在编译状态中,class(指的是对象的引用)可以是object对象、父类,自身类,子类。在这三种情况下Java编译时不会报错。
  • 在运行状态中,class 可以是 object 对象,父类,自身类,不能其他是子类。在前面三种情况下 result 的结果为 true,最后一种为false。但是class为子类时编译不会报错。运行结果为false.(大致就是判断表达式:class 变量=(class)object的引用 是否立)。

 示例代码:

AnimalParent.java

package com.api.Demo06;
public class AnimalParent {
//public interface AnimalParent { //也可以时接口
}

Cat.java

package com.api.Demo06;
public class Cat extends AnimalParent{
//public class Cat implements AnimalParent{
}

Dog.java

package com.api.Demo06;
public class Dog extends AnimalParent{
//public class Dog implements AnimalParent{
}

Test.java

package com.api.Demo06;
public class Test01 {
    public static void main(String[] args) {
        //多态技术
        AnimalParent cat = new Cat();
        // 类型转换异常
//        Dog dog = (Dog) cat; //com.api.Demo06.Cat cannot be cast to com.api.Demo06.Dog
        // if(对象的引用 instanceof 具体的类型(类或接口))
        if (cat instanceof Dog) { //返回 布尔类型 是该类型 返回true,不是则返回false
            System.out.println("cat 是 Dog 类型");
        } else {
            System.out.println("cat 不是 Dog 类型");
        }
        /**
         * cat instanceof Dog 不是
         * cat instanceof Cat||AnimalParent||Object 是
         * 在编译状态中,class(对象的引用)可以是object对象的父类(AnimalParent),自身类(Cat),子类。
         * 在这三种情况下Java编译时不会报错。
         */
        // 强转时 程序可能会直接 抛出异常,所以可以使用 instanceof 判断一下
        if (cat instanceof Dog) {
            Dog dog = (Dog) cat;
            System.out.println("类型符合,可以强转");
        } else {
            System.out.println("类型不符,不能强转");
        }
    }
    /**
     * 在运行状态中,class 可以是 object 对象的父类(AnimalParent),自身类(Cat),不能是其他的子类(Dog、)。
     * 在前面两种情况下 result 的结果为 true,最后一种为false。
     */
}

到此这篇关于Java中instanceof 关键字的使用的文章就介绍到这了,更多相关Java instanceof 关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • springboot中request和response的加解密实现代码

    springboot中request和response的加解密实现代码

    这篇文章主要介绍了springboot中request和response的加解密实现,在springboot中提供了RequestBodyAdviceAdapter和ResponseBodyAdvice,利用这两个工具可以非常方便的对请求和响应进行预处理,需要的朋友可以参考下
    2022-06-06
  • SpringBoot内置服务器(Tomcat/Jetty/Undertow)切换的操作指南

    SpringBoot内置服务器(Tomcat/Jetty/Undertow)切换的操作指南

    本文介绍了如何在SpringBoot中切换内置服务器(Tomcat、Jetty和Undertow),分析了它们的核心差异和适用场景,通过修改pom.xml和application.yml文件,可以实现服务器的切换和自定义配置,最后给出了选型建议和注意事项,需要的朋友可以参考下
    2026-03-03
  • Java中静态代码块、构造代码块、构造函数和普通代码块的区别

    Java中静态代码块、构造代码块、构造函数和普通代码块的区别

    在Java中,静态代码块、构造代码块、构造函数、普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序,需要的朋友可以参考下
    2023-05-05
  • Spring BeanFactory工厂使用教程

    Spring BeanFactory工厂使用教程

    Spring的本质是一个bean工厂(beanFactory)或者说bean容器,它按照我们的要求,生产我们需要的各种各样的bean,提供给我们使用。只是在生产bean的过程中,需要解决bean之间的依赖问题,才引入了依赖注入(DI)这种技术
    2023-02-02
  • 解析java.library.path和LD_LIBRARY_PATH的介绍与区别

    解析java.library.path和LD_LIBRARY_PATH的介绍与区别

    这篇文章主要介绍了java.library.path和LD_LIBRARY_PATH的介绍与区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Java方法的返回值及注意事项小结

    Java方法的返回值及注意事项小结

    这篇文章主要介绍了Java方法的返回值及注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Java实现多层文件夹压缩功能

    Java实现多层文件夹压缩功能

    这篇文章主要为大家详细介绍了如何利用Java语言进行多层文件夹压缩功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-08-08
  • 深入学习Spring Cloud-Ribbon

    深入学习Spring Cloud-Ribbon

    这篇文章主要介绍了Spring Cloud-Ribbon的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友一起看看吧
    2021-03-03
  • IDEA集成MyBatis Generator插件的使用

    IDEA集成MyBatis Generator插件的使用

    这篇文章主要介绍了IDEA集成MyBatis Generator插件的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • java处理异常的机制关键字throw和throws使用解析

    java处理异常的机制关键字throw和throws使用解析

    这篇文章主要介绍了java处理异常的机制关键字throw和throws使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09

最新评论