您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

深入理解Java虚拟机——方法调用和返回指令

小志的博客 发布时间:2022-03-18 22:05:51 ,浏览量:0

目录
    • 一、方法调用指令
    • 二、方法调用指令的示例
    • 三、方法返回指令的示例

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

    在这里插入图片描述 在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0410s