2017-03-24 14 views
0

许多书籍都表示java final实例方法(不是私有的)使用静态绑定,而其他实例方法(不是私有的)使用动态绑定。但是,编译时,它们都使用“invokevirtual”JVM指令。当JVM执行“invokevirtual”指令时,是否区分final方法和非final方法?我最初认为最终方法使用“invokespecial”作为私有实例方法,因为它们都使用静态绑定。Java final方法使用静态绑定,但JVM在编译时使用“invokevirtual”指令

回答

0

没有其他字节码指令调用除invokevirtual以外的类声明的实例方法。它的名字令人困惑。它也可以被命名为invokeClassMethodinvokeclass。实际上编译器并不特意处理最终的方法。 invokespecial用于调用构造函数和静态初始值设定项。