• java中instanceof用法


    有一位博主的例子非常好,在此先引用一下他的例子。

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
     用法:
    result = object instanceof class
    参数:
    Result:布尔类型。
    Object:必选项。任意对象表达式。
    Class:必选项。任意已定义的对象类。
    说明:
    如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

     

    例子如下:

     interface A{}
     class B implements A{
      
     }
     class C extends B {
      
     }
     class instanceoftest {
      public static void main(String[] args){
         A a=null;
         B b=null;
         boolean res; 
         
         System.out.println("instanceoftest test case 1: ------------------");
         res = a instanceof A; 
         System.out.println("a instanceof A: " + res);  // false
           
         res = b instanceof B;
         System.out.println("b instanceof B: " + res);  // false
           
         System.out.println("/ninstanceoftest test case 2: ------------------");   
         a=new B();
         b=new B();
         
         res = a instanceof A;  // a引用的是A接口实现类的实例,所以true
         System.out.println("a instanceof A: " + res);
         
         res = a instanceof B;  // a引用的是B类的实例,所以true
         System.out.println("a instanceof B: " + res);

         res = b instanceof A; // b引用的是A接口实现类的实例,所以true
         System.out.println("b instanceof A: " + res);
         
         res = b instanceof B; // b引用的是B类的实例,所以true
         System.out.println("b instanceof B: " + res);
        
         System.out.println("/ninstanceoftest test case 3: ------------------");
         B b2=new C();
         
         res = b2 instanceof A; // b2引用的是A接口实现类子类的实例,所以true
         System.out.println("b2 instanceof A: " + res);
         
         res = b2 instanceof B; // b2引用的是B类子类的实例,所以true
         System.out.println("b2 instanceof B: " + res);
         

         res = b2 instanceof C; // b2引用的就是C类的实例,所以true

         System.out.println("b2 instanceof C: " + res);
      }
    }


    /*
    result:

    instanceoftest test case 1: ------------------
    a instanceof A: false
    b instanceof B: false

    instanceoftest test case 2: ------------------
    a instanceof A: true
    a instanceof B: true
    b instanceof A: true
    b instanceof B: true

    instanceoftest test case 3: ------------------
    b2 instanceof A: true
    b2 instanceof B: true
    b2 instanceof C: true

    */

    ======================================================================

    我个人还想补充说明:

    比如:Item是CD的父类

    Item item = new Item();  // ①

    CD cd = new CD();  // ②

    item = cd;  // ③

    CD cc = (CD)item  // ④

    如果取消③就会报ClassCastException异常。

    如果试图把一个父类的引用对象的实例转换成子类类型,则这个引用对象必须是子类实例才行(即编译时类型为父类类型,而运行时类型是子类类型),否则在运行时引发ClassCastException。

    解决办法:

    if (item instanceof CD) { // 如果没去掉语句3,item引用的是CD的实例,true
        CD cc = (CD)item;   //  如果去掉了语句3,item引用的是Item的实例, 
                               // 不是CD或者其子类的实例,false,执行else
        System.out.println("已转化");
    } else {
        System.out.println("未转化");
    }

    又比如:

    Object object = new Integer(5);
    if (object instanceof String) {// object引用的并不是String对象的实例,且String没有子类,不会是其子类实例所以false,执行else,代码更加健壮
        String str = (String) object;
        System.out.println("转化成功!");
    } else {
        System.out.println("未转化成功!");
    }


    ========================================Talk is cheap, show me the code=======================================

    CSDN博客地址:https://blog.csdn.net/qq_34115899
  • 相关阅读:
    使用MongoDB的开源项目
    友盟统计-标准版
    友盟统计-游戏版
    尝试一下用MARKDOWN嵌入代码
    markdown与textile之间互相转换
    20145218 《信息安全系统设计基础》期中总结
    20145218 《信息安全系统设计基础》第六周学习总结
    20145218 《信息安全系统设计基础》第5周学习总结
    # 20145218 《信息安全系统设计基础》第4周学习总结
    20145218 《信息安全系统设计基础》第3周学习总结
  • 原文地址:https://www.cnblogs.com/lcy0515/p/9179767.html
Copyright © 2020-2023  润新知