gpt4 book ai didi

java - invoke-virtual vs invoke-direct 在构造函数中

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:02 32 4
gpt4 key购买 nike

我正在研究性能监控系统,它可以将其例程注入(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-directinvoke-virtual 之间的区别。

调用方法时,这很简单(如果方法是私有(private)的,则使用 invoke-direct 调用,否则使用 invoke-virtual)。这似乎不是构造函数的情况。

当从一个构造函数调用另一个构造函数时,调用 invoke-directinvoke-virtual 的规则是什么?

最佳答案

您可以从一个构造函数调用另一个构造函数:

public class Foo
{
private int x;

public Foo()
{
this(1);
}

public Foo(int x)
{
this.x = x;
}
}

注意:

  1. 您只能链接到一个构造函数,并且它必须是构造函数主体中的第一条语句。

  2. 如果要链接继承的构造函数,可以使用 super 而不是 this

  3. invoke-direct 用于构造函数私有(private)方法

关于java - invoke-virtual vs invoke-direct 在构造函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32312843/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com