【0】README
1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)——编码签名 的基础知识 ;
【1】编码签名相关
1) 混编规则:为了访问实例域和调用用 java 定义的方法,你必须学习将数据类型的名称和方法签名进行混编的规则;
2)方法签名: 描述了参数和该方法返回值的类型;(干货——方法签名的定义)
3)下面是编码方案:
B==byte
C==char
D==double
F==float
I==int
J==long
Lclassname== 类的类型
S==short
V==void
Z==boolean;
4)几个荔枝:
- 4.1) 为了描述数组类型, 使用: [Ljava/lang/String;
- 4.2)一个float[][] 可以描述为: [[F;
- 4.3)要建立一个方法的完整签名, 需要吧括号内的参数类型都列出来, 然后列出返回值类型, 如: 一个接收两个整型参数并返回一个整数的方法编码为: (II)I;
- 4.4)在前一个荔枝中, 我们使用的print 方法的签名是: (Ljava/lang/String;)V == 该方法接收一个字符串,返回值是 void;
Attention) 在 L 表达式结尾处的分号:是类型表达式的终止符, 而不是参数间的分隔符;
- A1)看个荔枝:构造器Employee(java.lang.String, double, java.util.Date),具有如下签名:”(Ljava/lang/String;DLjava/util/Date;)V”
- A2)注意,在D 和 Ljava/util/Date; 之间没有分隔符;
- A3)另外要注意在这个编码方案中, 必须用 / 代替圆点 来分割包和类名;
- A4)结尾的V 表示返回类型为 void, 即使对 java 的构造器没有指定返回类型, 也需要将V 添加到 虚拟机签名中;
5)看个荔枝: 用带有选项 -s 的 javap 命令来从类文件中产生方法签名。如,运行 javap -s -private Employee