精华内容
下载资源
问答
  • java关键字

    2020-01-04 21:42:20
    用来测试一个对象是否为一个类的实例。 注意事项: (1)Obj必须为引用类型,不能是基本类型。 (2)obj为null时,将返回false。(java分为两种数据类型:基本数据类型和引用数据类型。并且还有一种特殊的null类型,...

    1. instanceof

    用来测试一个对象是否为一个类的实例。

    • 注意事项:
      (1)Obj必须为引用类型,不能是基本类型。
      (2)obj为null时,将返回false。(java分为两种数据类型:基本数据类型和引用数据类型。并且还有一种特殊的null类型,该类型没有名字。)
      (3)当obj为class接口的实现类或者为class类的直接或者间接子类,返回true。

    2. assert

    断言是一种软件调试方法。 作用:对一个Boolean表达式进行检查,一个正确运行的程序保证Boolean值为true,若为false,则说明程序不正确,系统需要提供警告信息并且退出程序。

    • assert的表达方式:
      (1)assert expression1
      (2)assert expression1:expression2
      其中expression1标识一个Boolean表达式,expression2表示一个基本类型或者一个对象。
      虽然assert的功能与if判断类似,但是二者存在本质性的区别:assert一般用于调试程序。如果不小心用它来控制流程的业务流程,那在调试之后去掉assert就意味着修改了程序的正常逻辑,而if随机逻辑判断,本身就是用来控制程序流程的。
    • assert的应用范围:
      (1)检查控制流
      (2)检查输入参数是否有效
      (3)检查函数结果是否有效
      (4)检查程序不变量
      在实际开发中,assert用来保证程序的正确性,通常开发和测试使用,为了调高效率,软件发布后,assert默认关闭。

    final

    • 根据上下文环境,final的含义存在着细微的区别,但通常它指的是”这是无法改变的“。
    • 编译器常量:必须是基本数据类型,并且以关键字final表示。在对这个常量进行 定义的时候,必须对其进行赋值(可以在编译时执行运算)
    • 当对象引用运用final时,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。
    class Value {
        int i;
        public Value(int i) {
            this.i = i;
        }
    }
    public class FinalData {
        private static Random rand = new Random(47);
        private String id;
    
        public FinalData(String id) {
            this.id = id;
        }
    
        //编译器常量
        private final int valueOne = 9;
        private static final int VALUE_TWO = 99;
        //典型的公共常量,定义为public,则可用于包之外。定义为static强调只有一份
        public static final int VALUE_THREE = 39;
        //final修饰的数据在编译时不一定知道它的值
        private final int i4 = rand.nextInt(20);
        private static final int INT_5 = rand.nextInt(20);
        //为了表明final对于引用类型的意义(final修饰的是引用,引用上存的是对象的地址值,所以地址值不能盖面,对象也不能改变)。
        private Value v1 = new Value(11);
        private final Value v2 = new Value(22);
        private static final Value VAL_3 = new Value(33);
    
        private final int[] a = {1, 2, 3, 4, 5, 6};
    
        @Override
        public String toString() {
            return id + "; " + "i4=" + i4 + ", INT_5 = " + INT_5;
        }
    
        public static void main(String[] args) {
            FinalData fd1 = new FinalData("fd1");
            //fd1.valueOne++; 被final修饰的不能被修改
            fd1.v2.i++;
            fd1.v1 = new Value(9);
            for (int i = 0; i < fd1.a.length; i++) {
                fd1.a[i]++;
            }
            System.out.println(fd1);
            System.out.println("Creating new FinalData");
            FinalData fd2 = new FinalData("fd2");
            //为了说明final数值定义为静态和非静态的区别。(静态的只加载一次)
            System.out.println(fd1);
            System.out.println(fd2);
    		//结果为:
    		/*fd1; i4=15, INT_5 = 18
            Creating new FinalData
            fd1; i4=15, INT_5 = 18
            fd2; i4=13, INT_5 = 18*/
        }
    }
    
    • 空白final:声明为final但又未给定初值的域。但必须在每个构造器中用表达式final进行赋值。
    • final参数:Java允许在参数列表中以声明的方式将参数指明为final,这意味着你无法在方法中更改参数。
    • final方法:把方法锁定,以防任何继承修改它的含义(在继承中使方法行为保持不变,并且不会被覆盖,类中所有的private方法都隐式地指定为final的。)
    • final类:该类不允许继承。
    展开全文
  • 目录instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:1booleanresult = objinstanceofClass其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的...

    目录

    instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:

    1

    boolean result = objinstanceof Class

    其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。

    注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。

    回到顶部

    1、obj 必须为引用类型,不能是基本类型

    1

    2

    3

    int i =0;

    System.out.println(iinstanceof Integer);//编译不通过

    System.out.println(iinstanceof Object);//编译不通过

    instanceof 运算符只能用作对象的判断。

    回到顶部

    2、obj 为 null

    1

    System.out.println(null instanceof Object);//false

    关于 null 类型的描述在官方文档:https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.1 有一些介绍。一般我们知道Java分为两种数据类型,一种是基本数据类型,有八个分别是 byte  short  int  long  float  double  char boolean,一种是引用类型,包括类,接口,数组等等。而Java中还有一种特殊的 null 类型,该类型没有名字,所以不可能声明为 null 类型的变量或者转换为 null 类型,null 引用是 null 类型表达式唯一可能的值,null 引用也可以转换为任意引用类型。我们不需要对 null 类型有多深刻的了解,我们只需要知道 null 是可以成为任意引用类型的特殊符号。

    在 JavaSE规范 中对 instanceof 运算符的规定就是:如果 obj 为 null,那么将返回 false。

    回到顶部

    3、obj 为 class 类的实例对象

    1

    2

    Integer integer =new Integer(1);

    System.out.println(integerinstanceof  Integer);//true

    这没什么好说的,最普遍的一种用法。

    回到顶部

    4、obj 为 class 接口的实现类

    了解Java 集合的,我们知道集合中有个上层接口 List,其有个典型实现类 ArrayList

    1

    2

    public class ArrayListextends AbstractList

    implements List, RandomAccess, Cloneable, java.io.Serializable

    所以我们可以用 instanceof 运算符判断 某个对象是否是 List 接口的实现类,如果是返回 true,否则返回 false

    1

    2

    ArrayList arrayList =new ArrayList();

    System.out.println(arrayListinstanceof List);//true

    或者反过来也是返回 true

    1

    2

    List list =new ArrayList();

    System.out.println(listinstanceof ArrayList);//true

    回到顶部

    5、obj 为 class 类的直接或间接子类

    我们新建一个父类 Person.class,然后在创建它的一个子类 Man.class

    1

    2

    3

    public class Person {

    }

    Man.class

    1

    2

    3

    public class Manextends Person{

    }

    测试:

    1

    2

    3

    4

    5

    6

    Person p1 =new Person();

    Person p2 =new Man();

    Man m1 =new Man();

    System.out.println(p1instanceof Man);//false

    System.out.println(p2instanceof Man);//true

    System.out.println(m1instanceof Man);//true

    注意第一种情况, p1 instanceof Man ,Man 是 Person 的子类,Person 不是 Man 的子类,所以返回结果为 false。

    回到顶部

    6、问题

    前面我们说过编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。

    看如下几个例子:

    1

    2

    3

    4

    5

    6

    Person p1 =new Person();

    System.out.println(p1instanceof String);//编译报错

    System.out.println(p1instanceof List);//false

    System.out.println(p1instanceof List>);//false

    System.out.println(p1instanceof List);//编译报错

    按照我们上面的说法,这里就存在问题了,Person 的对象 p1 很明显不能转换为 String 对象,那么自然 Person 的对象 p1 instanceof String 不能通过编译,但为什么 p1 instanceof List 却能通过编译呢?而 instanceof List 又不能通过编译了?

    回到顶部

    7、深究原理

    7a35183c153063db8d5bbc45fad4a0e5.png

    如果用伪代码描述:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    boolean result;

    if (obj ==null) {

    result =false;

    }else {

    try {

    T temp = (T) obj;// checkcast

    result =true;

    }catch (ClassCastException e) {

    result =false;

    }

    }

    也就是说有表达式 obj instanceof T,instanceof 运算符的 obj 操作数的类型必须是引用类型或空类型; 否则,会发生编译时错误。

    如果 obj 强制转换为 T 时发生编译错误,则关系表达式的 instanceof 同样会产生编译时错误。 在这种情况下,表达式实例的结果永远为false。

    在运行时,如果 T 的值不为null,并且 obj 可以转换为 T 而不引发ClassCastException,则instanceof运算符的结果为true。 否则结果是错误的

    简单来说就是:如果 obj 不为 null 并且 (T) obj 不抛 ClassCastException 异常则该表达式值为 true ,否则值为 false 。

    所以对于上面提出的问题就很好理解了,为什么 p1 instanceof String 编译报错,因为(String)p1 是不能通过编译的,而 (List)p1 可以通过编译。

    回到顶部

    8、instanceof 的实现策略

    8adb071f85847a98f7b3773c2bb41ef1.png

    1、obj如果为null,则返回false;否则设S为obj的类型对象,剩下的问题就是检查S是否为T的子类型;

    2、如果S == T,则返回true;

    3、接下来分为3种情况,之所以要分情况是因为instanceof要做的是“子类型检查”,而Java语言的类型系统里数组类型、接口类型与普通类类型三者的子类型规定都不一样,必须分开来讨论。

    ①、S是数组类型:如果 T 是一个类类型,那么T必须是Object;如果 T 是接口类型,那么 T 必须是由数组实现的接口之一;

    ②、接口类型:对接口类型的 instanceof 就直接遍历S里记录的它所实现的接口,看有没有跟T一致的;

    ③、类类型:对类类型的 instanceof 则是遍历S的super链(继承链)一直到Object,看有没有跟T一致的。遍历类的super链意味着这个算法的性能会受类的继承深度的影响。

    参考链接:https://www.zhihu.com/question/21574535

    标签:instanceof,p1,Java,关键字,类型,obj,null,class

    来源: https://www.cnblogs.com/renjiaqi/p/12058203.html

    展开全文
  • java关键字instanceof

    2020-04-18 04:40:01
    instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: boolean result = obj instanceof Class 其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的...

    instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:

    boolean result = obj instanceof Class
    

    其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。

    注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。

    https://www.cnblogs.com/ysocean/p/8486500.html
    在这里插入图片描述
    喜欢的朋友可以关注我的个人公众号,后台回复java资料可免费领取资源。
    在这里插入图片描述

    展开全文
  • java关键字 instanceof

    2019-09-26 04:22:29
    instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: boolean result = obj instanceof Class  其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class ...

    instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:

    boolean result = obj instanceof Class

      其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false

      注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定

    1、obj 必须为引用类型,不能是基本类型

    int i = 0; 
    System.out.println(i instanceof Integer); //编译不通过
    System.out.println(i instanceof Object); //编译不通过

    instanceof 运算符只能用作对象的判断

    2、obj 为 null

    System.out.println( null instanceof Object); //false

    如果 obj 为 null,那么将返回 false

    3、obj 为 class 类的实例对象

    Integer integer = new Integer( 1 ); 
    System.out.println(integer instanceof Integer); //true

    最普遍的一种用法

    4、obj 为 class 接口的实现类

    ArrayList arrayList = new ArrayList(); 
    System.out.println(arrayList instanceof List); //true

    或者反过来也是返回 true

    List list = new ArrayList(); 
    System.out.println(list instanceof` `ArrayList);``//true

    5、obj 为 class 类的直接或间接子类

    转载于:https://www.cnblogs.com/xiangyuguan/p/11317459.html

    展开全文
  • 在本篇文章里小编给大家整理的是一篇关于...flag默认为true 创建一个线程A去判断flag是否为true,如果为true循环执行i++操作两秒后,创建另一个线程B将flag修改为false 线程A没有感知到flag已经被修改成false了,不能
  • instanceof关键字的作用是用来判断一个对象实例是否是某一个特定类型(以及该特定类型的子类)的对象实例。返回结果是一个布尔类型的返回值(也可能编译报错)。用法:Object instanceof ClassName结果:1.如果判断...
  • Java关键字-instanceof

    2020-09-01 15:28:28
     其中 obj 一个对象,Class 表示一个类或者一个接口,当 obj Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。  注意:编译器会检查 obj 是否能转换...
  • java关键字 instanceOf

    2015-10-06 16:34:32
    String s = "test";  boolean isObject = s ... 我们声明了一个String对象引用,指向"test"对象,然后用instancof来测试s所指向的对象是否是Object类的一个实例,显然是,所以返回true,也就是isObject的值真。
  • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口...
  • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口...
  • 创建一个线程A去判断flag是否为true,如果为true循环执行i++操作 两秒后,创建另一个线程B将flag修改为false 线程A没有感知到flag已经被修改成false了,不能跳出循环 这相当于啥呢?相当于你的女神和你说,你好好...
  • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口...
  • super关键字的用法: super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。 super永远于构造器的第一句 会往上追溯   “==”和equals: “==”代表比较双方是否相同。如果是...
  • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:boolean result = obj instanceof Class其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象...
  • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:boolean result = obj instanceof Class其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象...
  • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: boolean result = obj instanceof Class其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象...
  • instanceof 是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:boolean result = obj instanceof Class其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是...
  • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:boolean result = obj instanceof Class其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象...
  • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: boolean result = obj instanceof Class  其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 ...
  • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: booleanresult = objinstanceofClass 其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的...
  • Java instanceof关键字

    2016-11-19 11:23:15
    可以用 instanceof 判断一个类是否实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。instanceof 的语法格式: 对象 instanceof 类(或接口) 它的返回值是布尔型的,或真(true)、或假(false)...
  • Java关键字instanceof

    2020-05-30 20:27:38
    instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: boolean result = obj instanceof Class; 其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的...
  • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: boolean result = obj instanceof Class 其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的...
  • 例如:在下面的示例中,我们判断两个值20是否大于18,如果条件为true,请打印输出一些文本:if (20 > 18) {System.out.println("20大于18");}1、定义和用法if语句指定条件为true时要执行的Java代码块。Java具有...
  • instanceof关键字 判断某一对象是否为这个类或其子类的实例 用法 a instenceof A 如果a是A类的实例,返回true 如果a是A的子类的实例,也返回true
  • Java的instanceof关键字

    2020-06-06 21:26:50
    instanceof 中文意思:实例 用来测试一个对象是否为一个类的实例 Integer integer =newInteger(1); System.out.println(integerinstanceofInteger);//true integer是Integer的实例
  • Java中instanceof关键字

    2020-10-22 18:57:04
    通常在判断一个对象是否是是一个类的实例,或者其子类、实现类的实例的情况下使用 格式: (obj instanceof Class) obj-------一个对象 Class-------表示一个类或者一个接口 如果obj是Class的对象/子类/间接子类,...
  • 1 案例之变量内存可见性代码解析:新起一个子线程执行m()方法,1秒后主线程将b置false,子线程是否会停止执行死循环while(b){},打印“end”package com.bernardlowe.concurrent.t01;import java.util.concurrent....
  • 要检查给定的String是否仅包含unicode字母,数字或空格,我们将isLetterOrDigit()andcharAt()方法与决策语句一起...它返回一个布尔值,为true或false。声明-java.lang.Character.isLetter()方法声明如下-publicstat...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 201
精华内容 80
关键字:

true是否为java关键字

java 订阅