该方法驻留在何处?例如,
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
,它可以决定不需要额外的间接。