基於 Android NDK 的學習之旅----- Java 方法對映到C中的簽名
原文: http://www.cnblogs.com/luxiaofeng54/archive/2011/08/18/2143977.html
剛接觸JNI 的 兄弟在看一些demo的時候 發現有類似與“([Ljava/lang/String;)V”的東西的時候肯定會很“蛋疼”,完全不懂這是啥東西,怎麼來的,有啥用處?
今天就講講這個“蛋疼”的東西把,俗稱 方法簽名
直接來個Demo 把 :
觀察下面四個方法對應的簽名
publicvoid test(){}()V publicvoid test1(int i){}(I)V publicint test2(){ return 1;}()I publicint 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 結果就顯示出我們想要的簽名了。、

哈哈,有圖有真相!這回兄弟如果還不懂的話,那我就沒辦法了。嘎嘎,開玩笑,有不理解的地方可以留言一起討論。
有不理解的兄弟請留言,個人技術有限,有講錯的地方請大牛們指出,講的不足的請多多包涵,謝謝,
點選下載原始碼方法簽名例子
最後給大家分享一份非常系統和全面的Android進階技術大綱已經進階資料
想學習更多Android知識,或者獲取相關資料請加入Android技術開發交流 878873098 進 群 即可找 群 管理免費領取。
主要是針對做移動開發一到五年,想系統深入提升或者是困於瓶頸的小夥伴。
Android高階技術大綱,以及系統進階視訊;

Android高階技術大綱

Android 進階視訊資料