什么?学java这么久了,必须要掌握 java描述符问题?安排!

在这里插入图片描述

什么?学java这么久了,必须要掌握 java描述符问题?安排!

java描述符

在这里插入图片描述

类型描述符

基元类型的描述符是单个字符:Z 表示 boolean,C 表示 char,B 表示 byte,S 表示 short, I 表示 int,F 表示 float,J 表示 long,D 表示 double。一个类类型的描述符是这个类的 内部名,前面加上字符 L,后面跟有一个分号。例如,String 的类型描述符为 Ljava/lang/String;。而一个数组类型的描述符是一个方括号后面跟有该数组元素类型的描述符。

Java类型类型描述符
booleanZ
charC
byteB
shortS
intI
floatF
longJ
doubleD
ObjectLjava/lang/Object;
int[][I
Object[][][[Ljava/lang/Object;
StringLjava/lang/String;

方法描述符

方法描述符是一个类型描述符列表,它用一个字符串描述一个方法的参数类型和返回类型。 方法描述符以左括号开头,然后是每个形参的类型描述符,然后是一个右括号,接下来是返回类 型的类型描述符,如果该方法返回 void,则是 V(方法描述符中不包含方法的名字或参数名)。

源文件中的方法声明方法描述符
void m(int i, float f)(IF)V
int m(Object o)(Ljava/lang/Object;)I
int[]m(inti,Strings)(ILjava/lang/String;)[I
Object m(int[] i)([I)Ljava/lang/Object;

一旦知道了类型描述符如何工作,方法描述符的理解就容易了。例如,(I)I述一个方法,它接受一个 int 类型的参数,返回一个 int。

借助ASM工具类实现

可以借助asm中的org.objectweb.asm.Type来帮助我们获得类型描述符和方法描述符。

import org.objectweb.asm.Type;
 
import java.lang.reflect.Method;
import java.util.Map;
 
public class TypeSample {
    public static void main(String[] args) throws Exception{
        System.out.println(Type.getInternalName(String.class));//java/lang/String
        System.out.println(Type.getInternalName(Map.class));//java/util/Map
 
        String descriptor = Type.getDescriptor(String.class);
        System.out.println(descriptor); //Ljava/lang/String;
 
        System.out.println(Type.INT_TYPE.getDescriptor());//I
 
        Method mainMathod = TypeSample.class.getDeclaredMethod("main", String[].class);
        System.out.println(Type.getMethodDescriptor(mainMathod));//([Ljava/lang/String;)V
    }
}
 

分类:java基础
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值