00:00
那最后的话呢,我们这块还有一个叫做类型检查指令,那针对于我们说引用数据类型的话呢,比如我们存在一个多肽的场景,对吧?假设呢,这是一个叫animal,那这呢,我们称为呢叫dog,这个狗的话呢,我们可以去继承于animal,那如果说我们现在一个多肽的形式声明的是一个animal的一个A,我们new了一个具体的一个dog。对吧,那这个时候的话呢,我们说这个多肽的形式,那咱们也可以把这个生命成负类引用的这个A呢,强转成是一个道类型,那在强转之前呢,咱们通常都会用一个关键字叫做instance of来判别一下呢,你当前这个引用呢,是否是我们指定某一个类型的一个实例,那如果是的话呢,我们就强转,强转的话呢,这里边儿又提到了,这个在咱们自解码指令这块呢,叫check cost。Check cost那呢,在咱们这儿呢,就不能叫关键字了,这是一个具体的自解码指令对吧。好,那我们看一下它俩的主要用途指令,哎,或者先看它也行,指令ince of呢,来判别给定的这个对象呢,是否是某一个类的实例,它会将判断的结果呢,压入操作数站当中,注意它有个结果在咱们张二层这个语法层面呢,它返回的是一个波尔类型的,对吧。
01:14
那这个你是出啊false啊对吧,把这个结果呢,压入到这个操作数站当中,然后这个check cost呢,它是用于检查类型这个强制转换是否可以进行,那如果可以进行呢,那么它就不会改变操作数据站,不会改变操作站,那否则的话呢,就会报出一个叫class cost的exception,所以咱们Java这个层面的话呢,就是你要强转不是你能转的这个类型,它就会报这样一个异常,这个异常不用咱给大家多讲,对吧,都应该比较熟悉,那下面呢,咱们就通过一个代码呢,大家去熟悉一下,那我们这儿呢,就合成到一个里边了。我行参呢声明了一个叫obj object加类型,我需要判断一下呢,它是否是string的一个实例,那如果是呢,我就强转,不是呢,我们就return一个no,就是这样的一个比较简单的一个操作,那这个操作呢,对应的这个自解码指令,咱们来做一个分析。
02:04
好,就是这样子的,首先呢,我们把这个lo的夏威夷,也就是我们这个OB间呢,给它加载进来,放到我们这个操作数站当中没问题,对吧?这个大家应该脑子里边比较形象,此时呢,我们局库变量表里边两个,一个是第一个位置Z次,第二个呢是我们这个obj,现在是把obj呢先加载到咱们这个操作站当中,然后呢,Obj instance of string,这个instance of呢,是咱们Java语法层面的关键字,在我们这个字解码指令这块呢,跟它同名的是一个指令,也叫instance of,判断它是否是这个死string类型的一个实例。啊,这个判断你加载进来的obj是谁的一个实例啊,通过我们这个操作数啊,是不是string的一个实例行,那如果你要试它这个实例下边这个位置呢,诶,我们相当于是一个判别,这是咱们涉及到下边这个流程控制相关的这一些具体的指令了,这块呢就先给大家说一下,就是如果你这个要满足的话呢,咱就接着往下走,要是不满足的话呢,直接就蹦到这个12了。
03:00
那如果说你这个obj确实是string的一个实力的话,咱们就接着往下走,往下干什么呢?这个因为这个呢,你判断完以后,他就出站了,对吧,接着呢,再把我们这个obj呢加载进来。加载进来之后呢,我们叫check cost,我相当于要进行强转了,强转的话呢,要转成谁啊,转成这个string类型,那如果说确实是string类型的,那转就没问题。由于咱们前面其实已经判别过了,所以这块转呢,它一定不会出现问题,对吧?所以这块呢就做了一个转换,转换完以后呢,这个当前方法就结束了,这里边涉及到这个return,咱们下边呢再详细给大家讲这个,因为你咱们反过去是个引用类型,所以呢是a return这样啊,那如果说你刚才那个判断objcent string不满足的话呢,直接跳到咱们这个12的位置,12在这儿呢,那我们就返回一个no,对吧。返回一个no,然后这个呢,Return这个咱们前面也都已经讲过了,对吧,已经讲过这个情况了,行这呢,就咱们提到了一个叫做check cast,一个叫so这样两个指令啊,就是对我们这个类型呢,来进行一个判别的。
04:04
OK,相对来说比较简单,那整个呢,咱们关于这个对象的创建和访问这块呢,咱们就这个诶告一段落。这里边儿呢,有这样四类,大家呢,稍微的熟悉一下。
我来说两句