深入理解Java虚拟机——方法调用和返回指令
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解Java虚拟机——方法调用和返回指令相关的知识,希望对你有一定的参考价值。
目录
一、方法调用指令
指令 | 作用 |
---|---|
invokevirtual | 用于调用对象的实例方法,根据对象的实际类型进行分派(虚方法分派),这也是java语言中最常见的方法分派方式 |
invokeinterface | 用于调用接口方法,它会在运行时搜索一个实现了这个接口方法的对象,找出适合的方法进行调用 |
invokespecial | 用于调用一些需要特殊处理的实例方法,包括实例初始化方法、私有方法和复类方法 |
invokestatic | 用于调用类方法(static方法) |
invokedynamic | 用于在运行时动态解析出调用点限定符所引用的方法,并执行该方法 |
- invokevirtual 、invokeinterface 、invokespecial 和invokestatic调用指令的分派逻辑都固化在Java虚拟机内部。
- invokedynamic 指令的分派逻辑是由用户设定的引导方法决定的。
- 方法调用指令与数据类型无关,而 方法返回指令是根据返回值的类型区分 ,包括ireturn(当返回值是boolean、byte、char、short、和int类型时使用)、lreturn、freturn、dreturn和areturn,另外还有一条return指令供声明为void的方法、实例初始化方法以及类和接口的类初始化方法使用。
二、方法调用指令的示例
-
代码
public class Test1 public static void main(String []args) UserService us=new UserServiceImpl(); int result=us.add(1,2); interface UserService int add(int a,int b); class UserServiceImpl implements UserService public int add(int a,int b) return a+b;
-
执行javac命令编译成.class文件
-
执行javap命令查看字节码指令
三、方法返回指令的示例
-
代码
public class Test1 public static void main(String []args) UserService us=new UserServiceImpl(); int result=us.add(1,2); interface UserService int add(int a,int b); class UserServiceImpl implements UserService public int add(int a,int b) return a+b;
-
执行javac命令编译成.class文件
-
执行javap命令查看字节码指令
以上是关于深入理解Java虚拟机——方法调用和返回指令的主要内容,如果未能解决你的问题,请参考以下文章