const类和const方法类型的操作码有什么作用?哪些Java代码会生成它们?

时间:2018-12-18 11:02:54

标签: java bytecode dalvik

我正在创建用于dalvik应用程序后处理的工具。对于测试,我想创建将包含每个操作码的代码。我在理解const类和const方法类型的操作码时遇到了问题。 dalvik官方文档中的定义并没有为我澄清这个问题。

  

常量类

     

将对给定索引指定的类的引用移动到   指定的寄存器。如果指示的类型是原始类型,   这将存储对原始类型的简并类的引用。

该类的参考是什么?据我所知,这不是对对象的引用。

相同
  

const-method-type

     

移动对由给定索引指定的方法原型的引用   进入指定的寄存器。

据我了解,这不是函数指针。函数指针由

处理
  

const-method-handle

     

移动对给定索引指定的方法句柄的引用   进入指定的寄存器。

我的问题是:

const类和const方法类型有什么用?什么样的Java代码会在Dalvik中生成这些操作码?

也许值得一提的是,我的Java经验很低-我是c ++类的人。

1 个答案:

答案 0 :(得分:3)

当您引用对象的class属性时,可以生成

const-class。例如Class cls = MyObject.class

据我所知,方法句柄和类型不是由Java代码生成的。您可以使用反射来引用它们,但我认为这样做实际上不会生成const-method-typeconst-method-handle指令

它们支持invoke-custom的强制转换,主要用于其他语言,这些语言已被编译为Java字节码,最终被编译为dalvik字节码。