zoukankan      html  css  js  c++  java
  • 第十四章 instanceof 与 isInstance

    在运行时识别一个对象的类型:instanceof,其返回一个boolean值,表示对象是不是某个特定类型的实例。

    用法:a instanceof B

    表示:对象实例a是否属于类B,或者是否是B的派生类

    instanceof的使用有严格的限制,只可将其与命名类型【即class类】进行比较,而不能与Class对象【即class类的对象】作比较。

    package 类型信息.类的加载;
    
    public class Fruit{
    
    }
    
    public class Apple extends Fruit{
    
    }
    package 类型信息.类的加载;
    
    /**
     * a instanceof B  表示:对象x是不是某个特定类型B的实例[a是否从属于B]
     * 
     * a.getClass().isinstance(b)
     * 
     * @author admin
     *
     */
    public class InstanceTest {
    
        public static void main(String[] args) {
            
            Apple a = new Apple();
            Fruit f = new Fruit();
            Fruit fru = new Apple();
            
            System.out.println(a instanceof Object);
            System.out.println(a instanceof Apple);
            System.out.println(a instanceof Fruit);
            System.out.println(f instanceof Apple);
            
        }
        
    }

    控制台:

    true
    true
    true
    false

    class.isInstance(Object obj)相对于instanceof要灵活一些,至少你可以传递参数去判断某class是否属于参数指定的对象实例或类字面常量。

    用法:A.class.isInstance(b)  或 a.getClass().isInstance(b),其中参数如果是类字面量或obj.getClass()这种用法没有任何意义。

     1 package 类型信息.类的加载;
     2 
     3 /**
     4  * a instanceof B  表示:对象x是不是某个特定类型B的实例[a是否从属于B]
     5  * 
     6  * a.getClass().isInstance(b) 或 A.Class.isInstance(b)
     7  * 
     8  * @author admin
     9  *
    10  */
    11 public class InstanceTest {
    12 
    13     public static void main(String[] args) {
    14         
    15         System.out.println("==========1==========");
    16         
    17         Apple a = new Apple();
    18         Fruit f = new Fruit();
    19         Fruit fru = new Apple();
    20         
    21         System.out.println(a instanceof Object);
    22         System.out.println(a instanceof Apple);
    23         System.out.println(a instanceof Fruit);
    24         System.out.println(f instanceof Apple);
    25         
    26         System.out.println("==========2==========");
    27         
    28         System.out.println(Apple.class.isInstance(a));
    29         System.out.println(Apple.class.isInstance(f));
    30         System.out.println(Apple.class.isInstance(fru));
    31         
    32         System.out.println("==========3==========");
    33         System.out.println(a.getClass().isInstance(a));
    34         System.out.println(a.getClass().isInstance(f));
    35         System.out.println(a.getClass().isInstance(fru));
    36         
    37     }
    38     
    39 }
    ==========1==========
    true
    true
    true
    false
    ==========2==========
    true
    false
    true
    ==========3==========
    true
    false
    true

    从结果可以看出:使用isInstance(obj)方法其实比较的是对象引用是否从属于某个类,而不是比较对象是否从属于某类。

    前进时,请别遗忘了身后的脚印。
  • 相关阅读:
    win10下的MyEclipse2017 ci7 破解教程+全套资源+失败处理(转)
    layui layer.open() 弹层开启后 Enter回车 遮罩层无限弹处理
    layui 或者layer 父页面获取子页面数据 或者子页面获取父页面操作方法(转)
    layui弹出层两个以上置顶弹出
    div自动获焦并将光标定位到最后
    hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
    形参与实参的区别
    linux下安装Mysql(干货!!!)解决mysql 1130问题,远程登录问题
    linux下安装Mysql(干货!!!)
    java文件上传与下载
  • 原文地址:https://www.cnblogs.com/liudaihuablogs/p/9325950.html
Copyright © 2011-2022 走看看