【JVM 重要了解】class类文件中方法调用涉及的一些概念(简单名称、描述符、全限定名、方法句柄和方法类型、动态调用方法、符号引用)

本文详细介绍了JVM中关于类文件方法调用的相关概念,包括简单名称、全限定名、描述符、方法句柄、方法类型、动态调用方法、符号引用以及动态调用点。通过具体的示例和源码解析,帮助读者理解这些概念在Java程序执行过程中的作用和应用场景。
摘要由CSDN通过智能技术生成

一二中的概念如图展示:

package com.study.method;

public class TestClass {
   

    private int x;
    
    public int addResult() {
   
        return x+1;
    }
}

一、简单名称

没有类型和参数修饰的方法或字段名称
比如整形变量x和方法addResult。

二、全限定名

一个类的全限定名是将类全名的.全部替换为/
例如com/study/method/TestClass

三、描述符

如下图,这里贴上官方文档:

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html

在这里插入图片描述
在这里插入图片描述
以上来自简书https://www.jianshu.com/p/8b33361a5a3f

四、方法句柄和方法类型

Java7中为间接调用方法引入了新的api,即 方法句柄。
方法句柄中包含两个重要的类,MethodHandle和MethodType.

MethodType用来描述方法的返回值类型以及入参类型。
MehodHandle包含一个指向Method对象(方法在jvm内部的对等体)的指针。

而MehodHandle对象有2个重要方法invokeinvokeExact.
invokeExtract要求更加精确

MethodHandle获得的方法引用,并不能 突破访问权限本身的限制,比如private方法,就不能在类外被使用,这一点不如反射。
通过句柄调用方法示例(来源:https://blog.csdn.net/wulianzhazha/article/details/78815647):

public class TestUtil {
   

    public static void main(String[] args) throws Throwable{
   
        //声明定义方法的签名,参数为返回值类型、参数类型
        MethodType methodType = MethodType.methodType(void.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值