4种方法调用指令区分非虚方法与虚方法

方法的调用:虚方法与非虚方法

非虚方法:

  • 如果方法在编译器就确定了具体的调用版本,这个版本在运行时是不可变的。这样的方法称为非虚方法
  • 静态方法、私有方法、final方法、实例构造器、父类方法都是非虚方法
  • 其他方法称为虚方法

虚拟机中提供了以下几条方法调用指令:

  • 普通调用指令:
    1.invokestatic:调用静态方法,解析阶段确定唯一方法版本
    2.invokespecial:调用<init>方法、私有及父类方法,解析阶段确定唯一方法版本
    3.invokevirtual:调用所有虚方法
    4.invokeinterface:调用接口方法

  • 动态调用指令:
    5.invokeddynamic:动态解析出需要调用的方法,然后执行

前四条指令固化在虚拟机内部,方法的调用执行不可人为干预,而invokedynamic指令则支持由用户确定方法版本。其中invokestatic指令和invokespecial指令调用的方法称为非虚方法,其余的(final修饰的除外)称为虚方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容