什么?學(xué)java這么久了,必須要掌握 java描述符問題?安排!

java描述符

類型描述符

基元類型的描述符是單個(gè)字符:Z 表示 boolean,C 表示 char,B 表示 byte,S 表示 short, I 表示 int,F(xiàn) 表示 float,J 表示 long,D 表示 double。一個(gè)類類型的描述符是這個(gè)類的 內(nèi)部名,前面加上字符 L,后面跟有一個(gè)分號。例如,String 的類型描述符為 Ljava/lang/String;。而一個(gè)數(shù)組類型的描述符是一個(gè)方括號后面跟有該數(shù)組元素類型的描述符。

Java類型 類型描述符
boolean Z
char C
byte B
short S
int I
float F
long J
double D
Object Ljava/lang/Object;
int[] [I
Object[][] [[Ljava/lang/Object;
String Ljava/lang/String;

[圖片上傳失敗...(image-6ab1d7-1628323272513)]

方法描述符

方法描述符是一個(gè)類型描述符列表,它用一個(gè)字符串描述一個(gè)方法的參數(shù)類型和返回類型。 方法描述符以左括號開頭,然后是每個(gè)形參的類型描述符,然后是一個(gè)右括號,接下來是返回類 型的類型描述符,如果該方法返回 void,則是 V(方法描述符中不包含方法的名字或參數(shù)名)。

源文件中的方法聲明 方法描述符
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述一個(gè)方法,它接受一個(gè) int 類型的參數(shù),返回一個(gè) int。

借助ASM工具類實(shí)現(xiàn)

可以借助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基礎(chǔ)


在這里插入圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容