我正在创建用于dalvik应用程序后处理的工具。对于测试,我想创建将包含每个操作码的代码。我在理解const类和const方法类型的操作码时遇到了问题。 dalvik官方文档中的定义并没有为我澄清这个问题。
常量类
将对给定索引指定的类的引用移动到 指定的寄存器。如果指示的类型是原始类型, 这将存储对原始类型的简并类的引用。
该类的参考是什么?据我所知,这不是对对象的引用。
与
相同const-method-type
移动对由给定索引指定的方法原型的引用 进入指定的寄存器。
据我了解,这不是函数指针。函数指针由
处理const-method-handle
移动对给定索引指定的方法句柄的引用 进入指定的寄存器。
我的问题是:
const类和const方法类型有什么用?什么样的Java代码会在Dalvik中生成这些操作码?
也许值得一提的是,我的Java经验很低-我是c ++类的人。
答案 0 :(得分:3)
const-class
。例如Class cls = MyObject.class
。
据我所知,方法句柄和类型不是由Java代码生成的。您可以使用反射来引用它们,但我认为这样做实际上不会生成const-method-type
或const-method-handle
指令
它们支持invoke-custom
的强制转换,主要用于其他语言,这些语言已被编译为Java字节码,最终被编译为dalvik字节码。