目录
一、方法调用指令
指令作用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命令查看字节码指令