什么是 const-class 和 const-method-type 操作码?什么 java 代码生成它们?

What are const-class and const-method-type opcodes for? What java code generates them?

我正在创建一个用于 post 处理 dalvik 应用程序的工具。对于测试,我想创建包含每个操作码的代码。我在理解 const-class 和 const-method-type 操作码的作用时遇到问题。 dalvik 官方文档中的定义并没有为我澄清问题。

const-class

Move a reference to the class specified by the given index into the specified register. In the case where the indicated type is primitive, this will store a reference to the primitive type's degenerate class.

什么是对class的引用?据我所知,这不是对对象的引用。

const-method-type

Move a reference to the method prototype specified by the given index into the specified register.

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

处理

const-method-handle

Move a reference to the method handle specified by the given index into the specified register.

我的问题是:

const-class 和 const-method-type 有什么用?什么样的 java 代码会在 Dalvik 中生成这些操作码?

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

当你引用一个对象的class属性时,可以生成

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

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

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