亚冠

深入分析java中的instanceof

2020-08-15 00:02:25来源:励志吧0次阅读

深入分析java中的instanceof关键字

instanceof关键字虽然没有final、static这些关键字用的多,但是也是非常重要的,尤其是面试。因此花了一些时间整理了一下。

一、认识instanceof关键字

其实instanceof就是一个操作符,语法形式很简单:

A通常是引用变量,B通常是一个类或者是接口,表示的含义有三个:

1A是否是B的实例。

2A是否是B子类的实例

3A是否是B接口实现类的实例

也就是说我们平时使用instanceof关键字一般作为判断左右两侧是否有继承或者是实现关系。带着上面的问题,下面我们就具体看看如何去使用这个关键字。

二、使用instanceof关键字

为了表述上面三个含义,我们先给出一个继承关系图,去实现。

上面这张类图继承关系已经很明确了,我们用代码看一下:

二、代码验证

首先我们给出其继承关系的代码

给出其方法,分别几个类。

在这里我们对四个类进行了。下面我们输出一下结果:

1Human是谁的实例呢?

在文章一开始我们已经给出,Human其实是一个根类,没有继承任何父类,也没有实现任何接口。所以他的输出也很简单

他自己只能是自己的实例了。

2Man是谁的实例?

Man继承了Human,实现了Play接口,因此他是Human的实例,同时也是Play接口的实例。

3Soldier是谁的实例?

Soldier继承了Man类,但是这里却没有实现Play接口,我们先看一下输出吧。

也就是说,父亲有的儿子也有,父类实现的接口,子类也默认实现了。

4Woman是谁的实例?

如果你理解了上面的Man,那么Woman你应该能够理解,Woman只继承了Human类,所以他应该有两个,一个是Human的实例,一个是自己的实例

三、总结

instanceof关键字用起来还是比较简单的,还记得我们在文章一开始提出的三个含义嘛?现在我们给其解答一下:

1A是A本身的实例。

2A是A父类或者是父类的父类的实例

3A是A接口或者是父类的接口的实例

既然instanceof是一个关键字,那说明jvm虚拟机能够正确的识别这个java指令。那么jvm如何去识别呢?

instanceof的指令格式是:instanceofindexbyte1indexbyte2。

指令执行前后的栈顶状态:objectref=>。。

indexbyte1和indexbyte2用于构造对当前类的常量池的索引,objectref为reference类型,可以是某个类,数组的实例或者是接口。在实现instanceof指令的时候,首先是对indexbyte1和indexbyte2构造的常量池索引进行解析,根据java规范判断解析的类是不是objectref的一个实例,最后在栈顶写入结果。

这一段看不懂没关系,这是在jvm的操作,一般面试的时候要是,你只要把其如何使用搞清楚就好了,非要显得一点,那就看看instanceof指令在jvm是如何实现的就好。

本文相关词条概念解析:

关键字

关键字是指用来标识文件中各个记录的特定数据项目的值。而在搜索引擎行业,所谓关键字,英文是keyword,就是希望访问者了解的产品、服务或者公司等内容名称的用语。简单的说,关键字就是用户在使用搜索引擎时输入的、能够最大程度概括用户所要查找的信息内容的字或者词,是信息的概括化和集中化。另外,关键字也是电脑语言用语。

百色哪里有白癜风治疗医院
泰州哪里有专业的白癜风医院
株洲看白癜风哪家医院专业
辽源好的白癜风医院
运城哪里有白癜风治疗医院
分享到:
  • 友情链接
  • 合作伙伴