我正在研究性能监控系统,它可以将其例程注入(inject)现有程序集。为此,我试图了解 dalvik 代码的工作原理。
下面是我要完成的工作的示例。输入类可能如下所示:
class MyClass{
public MyClass(__params__){
//initialization code
}
}
我想为类添加代码,如下所示:
class MyClass{
public MyClass(__params__){
this(_params__,0);
//tracking and performance initialization code
}
public MyClass(__params__, int init){
//old initialization code
}
}
到目前为止,导致大多数错误的原因是从一个构造函数调用另一个构造函数时 invoke-direct
和 invoke-virtual
之间的区别。
调用方法时,这很简单(如果方法是私有(private)的,则使用 invoke-direct
调用,否则使用 invoke-virtual
)。这似乎不是构造函数的情况。
当从一个构造函数调用另一个构造函数时,调用 invoke-direct
与 invoke-virtual
的规则是什么?
最佳答案
您可以从一个构造函数调用另一个构造函数:
public class Foo
{
private int x;
public Foo()
{
this(1);
}
public Foo(int x)
{
this.x = x;
}
}
注意:
您只能链接到一个构造函数,并且它必须是构造函数主体中的第一条语句。
如果要链接继承的构造函数,可以使用
super
而不是this
。invoke-direct
用于构造函数
和私有(private)方法
关于java - invoke-virtual vs invoke-direct 在构造函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32312843/