该方法驻留在何处?例如,

class Foo {
  public void foo_test(){}
}

Foo f1 = new Foo();
f1.foo_test();

(new Foo() {
  public void singleton_test(){
    foo_test();
  }
}).singleton_test();

方法驻留在类中还是实例中?

JVM 是否进行方法查找(如 C++ vtable)?上述 2 个方法调用是如何发生的?

我正在看这个页面:

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html

但它只是简单地解释了查找过程,而不是位置或任何细节。

这个问题是专门与 Oracle JVM 相关的。

最佳答案

Java 中的所有方法都是虚拟的,除了标记为 static 的方法。您的第二个示例只是创建了一个匿名内部类,它的行为几乎与命名类完全一样。 (从这个角度来看,它的行为完全相同。)

没有指定方法查找的确切机制,这取决于 VM 实现。这也为智能优化提供了空间,例如,如果一个方法没有覆盖另一个方法并且被标记为 final ,它可以决定不需要额外的间接。

10-07 19:14
查看更多