內容:
演示如何獲取一個方法的簽名。在JNI中,如果C語言要調用Java模塊,必定要用到反射技術(詳情),而在反射技術中,必須要用到簽名才能讓C語言獲取Java的方法。
小技巧:dos命令窗口裏面無法複製,只要鼠標點擊右鍵–》標記,然後光標就會變大,就可以選中複製區域,ctrl+c 就可以了。
步驟:
1.創建一個Java項目
目錄結構如下
在該項目中創建一個類,該類如下:
package hhh.exercise.test;
public class Test {
public void method1() {
System.out.println("調用了show方法");
}
public int method2(int i) {
return i;
}
public String method3(String string) {
return string;
}
}
2.控制檯語句
到帶該項目所在目錄,然後到bin目錄下(…JavaTest\bin),該目錄下\hhh\exercise\test裏面有字節碼文件。然後在這裏打開控制檯,如下所示:
在控制檯輸入javap,如下所示:
可以看到-s 可以輸出內部類型的簽名,所以就用在控制檯下輸入:javap -s hhh.exercise.test.Test
(或者在Test.class當前所在目錄打開控制檯,輸入javap -s Test 即可)
3.解釋簽名
由上面的圖可以看到:
public void method1()
descirption:()V
表示method1方法簽名()V,
可以看出()裏面是參數類型,爲空;V表示返回類型,爲空
public void method2()
descirption:(I)I
表示method2方法簽名(I)I,
可以看出(I)裏面是參數類型爲int;括號外的I表示返回類型爲int類型
public void method3()
descirption:(LJava/lang/String;)LJava/lang/String;
表示method3方法簽名(I)(LJava/lang/String;)LJava/lang/String; ,
可以看出(LJava/lang/String;)裏面是參數類型爲String;括號外的LJava/lang/String;表示返回類型爲String類型.