有四种方法调用相关的字节码:invokestatic
,invokespecial
,invokevirtual
,invokeinterface
这里简单总结它们的区别。
invokestatic:
调用静态方法invokespecial:
调用无须动态绑定的实例方法
,例如构造函数
,私有方法
,通过super关键字调用的超类方法
。剩下的方法属于动态绑定的方法。invokeinterface,invokevirtual
如果动态绑定的方法是针对接口类型的引用调用的方法,那么就使用invokeinterface
,否则调用invokevirtual