歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java 方法映射到C中的簽名

剛接觸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中的簽名/

Copyright © Linux教程網 All Rights Reserved