剛接觸JNI 的 兄弟在看一些demo的時候 發現有類似與“([Ljava/lang/String;)V”的東西的時候肯定會很“蛋疼”,完全不懂這是啥東西,怎麼來的,有啥用處?
今天就講講這個“蛋疼”的東西把,俗稱 方法簽名
直接來個Demo 把 :
觀察下面四個方法對應的簽名
public void test(){} ()V
public void test1(int i){} (I)V
public int test2(){ return 1;} ()I
public int test3(int i) { return i;} (I)I
哥們,你發現什麼了沒 ? 不錯,簽名是由兩部分組成,"()" 裡面代表的是方法的參數,後面外面的部分代表的是該方法的返回值
那這兩部分符號又是怎麼定義的呢 ? 與見分曉,請繼續往下看
關於這兩部分的定義其實又有分 基本數據類型 和 引用數據類型
基本數據類型對應關系如表:
其實仔細看看發現就是對應java類型的首字母拉, Boolean 比較特殊, 對應的是 Z , Long 對應J
引用數據類型:比較麻煩點,以“L”開頭,以“;”結束,中間對應的是該類型的路徑
如:String : Ljava/lang/String;
Object: Ljava/lang/Object;
自定義類 Cat 對應 package com.duicky;
Cat : Lcom/duicky/Cat;
數組表示: 數組表示的時候以“[” 為標志,一個“[”表示一維數組
如:int [] :[I
Long[][] : [[J
Object[][][] : [[[Ljava/lang/Object;
敲了這麼多字,累了,休息下,在問問,你懂了嗎 ?嘎嘎 , 別回頭,下面精彩不容錯過。
前面只是講 方法簽名 的基礎,來來來,現在看看 更簡單准確的方法。其實 JDK 給我們提供了相對應生成簽名的工,我們只需要直接運行就行了。
寫一個測試類,有如下方法:
public void test(){}
public void test1(int i){}
public int test2(){ return 1;}
public int test3(int i) { return i;}
public Cat test4(Cat c){ return new Cat();}
public Object test5(int [] a){ return null;}
public int[][] test5(long [][] b){ return null;}
public void test6(Object[][][] b){}
打開Cmd 命令行,cd 到 生成測試類 的 Class 目錄:
Cd 到 相對應的 文件夾
輸入命令: javap –s 加上你要查看方法簽名的 類 名
如: javap –s Test 結果就顯示出我們想要的簽名了。、
哈哈,有圖有真相! 這回兄弟如果還不懂的話,那我就沒辦法了。嘎嘎,開玩笑,有不理解的地方可以留言一起討論。
有不理解的兄弟請留言,個人技術有限,有講錯的地方請大牛們指出,講的不足的請多多包涵,謝謝,
方法簽名例子源碼 下載
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2013年資料/1月/2日/Java 方法映射到C中的簽名/