域描述符
1、基本类型描述符
Java | Field Desciptor |
---|---|
int | I |
boolean | Z |
byte | B |
char | C |
long | J |
double | D |
float | F |
short | S |
除了boolean,和 long 对应的比较特殊外,其余的是名称前缀的大写。
2、类描述符
L+包名+类名+;
注意“ ;
”是不能省略的!
例如 String
的包名是 java.lang
,那么它对应的描述符就是
Ljava/lang/String;
注意java
中的包名是用.
分割的,jni
中要替换成/
。
3、引用类型描述符
上面已经提到java
类的描述符,如String
对应的描述符是:Ljava/lang/String;
比较特殊的是 数组,格式是:
[ + 描述符
其中,是几维数组就有几个“[”
比如:
//一维数组
int[] [I
double[] [D
String[] [Ljava/lang/String;
User[] [Lxxx/xxx/User;
Object[] [Ljava/lang/Object;
//二维数组
float[][] [[F
long[][] [[J
4、方法描述符
格式:
(参数类型对应的描述符...)+返回值类型对应的描述符
原方法的参数列表有多少个参数,对应的描述符的括号内就有多少个相应的描述符,且是按顺序的,括号外面是方法返回值的描述符。
无参带返回值:
public int getAge(){
return age;
}
getAge
的方法描述符则为 ()I
带参带返回值:
public int getAge2(int age2){
return age+age2;
}
getAge2
的方法描述符则为 (I)I
那如果一个方法的描述符为(IF)D
,那这个方法则是 double xxx(int i,float f)
。