Oracle JVM:调用特殊指令

时间:2016-11-28 19:11:59

标签: java jvm bytecode instructions

我对下面的段落感到困惑(来源Oracle JVM specification for invokespecial instruction)。

  

如果满足以下所有条件,则将C作为直接超类   当前班级:

     
      
  1. 已解析的方法不是实例初始化方法(第2.9节)。
  2.   
  3. 如果符号引用命名一个类(不是接口),那么该类是当前类的超类。
  4.   
  5. 为类文件(第4.1节)设置ACC_SUPER标志。
  6.   

我在 invokespecial 指令说明的第一段中制作了一些标签(符号: // label // )。我在下面的问题中使用了这个标签。

  

unsigned indexbyte1和indexbyte2用于构造索引   进入当前类 //当前类// (§2.6)的运行时常量池,其中   索引的值是(indexbyte1<< 8)| indexbyte2。运行时   该索引处的常量池项必须是对a的符号引用   方法或接口方法(第5.1节),它提供名称 //方法名称// 和   描述符 //方法描述符// (§4.3.3)的方法以及符号引用   类 //引用类// 或要在其中找到方法的接口。命名   方法已解决 //已解决的方法// (§5.4.3.3,§5.4.3.4)。

根据标签我现在用条件检查段落。

  
      
  1. 已解析的方法不是实例初始化方法(第2.9节)。
  2.   

问题1 :所以,我检查 //方法名称// 是否不等于“< init>”或“< clinit>”,对吧?

  
      
  1. 如果符号引用命名一个类(不是接口),那么该类是当前类的超类。
  2.   

问题2 :这意味着什么? //引用类// 必须是 //当前类// 的直接或非直接超类(超类的超类等)?

  
      
  1. 为类文件(第4.1节)设置ACC_SUPER标志。
  2.   

问题3 :哪个类的类文件? //引用类//

0 个答案:

没有答案