instanceof java 接口_java关键字系列之instanceof关键字

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

一、认识instanceof关键字

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

3fd23367d2f057a3b2ebc27a3942f0ed.png

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

(1)A是否是B的实例,

(2)A是否是B子类的实例

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

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

二、使用instanceof关键字

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

a8acd1db721a6e0bdcc42ef82f3eed14.png

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

二、代码验证

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

9b8b56389931cc3828648197129a9ac5.png

f80b72e0300b9264e84dfe5525b7fca4.png

然后给出其测试方法,分别测试几个类。

d36420bac01570eedbdebf69157712dd.png

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

(1)Human是谁的实例呢?

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

ba17ede51f81ccb85920b5ef8545a580.png

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

(2)Man是谁的实例?

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

e58426951e627f4b56a391b1c8adae0f.png

(3)Soldier是谁的实例?

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

9b7c7ea9526b7326563f47822ec8c99b.png

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

(4)Woman是谁的实例?

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

08afb53a15b20c156f65311f3d31d0f6.png

三、总结

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

(1)A是A本身的实例,

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

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

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

instanceof的指令格式是:instanceof|indexbyte1|indexbyte2。

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

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

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

公众号:java的架构师技术栈。回复关键字可获取2T各种教程资源和学习路线。感谢支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值