gpt4 book ai didi

java - 静态绑定(bind)和动态绑定(bind)用例

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

我们知道静态绑定(bind)发生在私有(private)、静态、最终和重载方法上,而动态绑定(bind)发生在重写方法上。但是,如果我的方法只是公开的,并且它既不是静态的,也不是被覆盖和重载的,那该怎么办。

public class Test{
public void print(){
System.out.println("hello!");
}
public static void main(String args[]){
Test t = new Test();
t.print();
}
}

谁能解释一下 print() 会发生什么绑定(bind),因为它既没有重载也没有被覆盖。

最佳答案

Java 无论如何都会使用 invokevirtual 来调用该方法(而且是动态的),无论该方法是否被覆盖。看字节码就更清楚了

public static void main(java.lang.String[]);
Code:
0: new #5 // class Test
3: dup
4: invokespecial #6 // Method "<init>":()V
7: astore_1
8: aload_1
9: invokevirtual #7 // Method print:()V
12: return

第 9 行显示了 invokevirtual。现在 JIT 编译器可能会决定删除动态分派(dispatch)以获得更好的性能,It is one of the used techniques .

关于java - 静态绑定(bind)和动态绑定(bind)用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956779/

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