1、基本概念
??? JNI是Java Native Interface(Java本地接口)的縮寫。所謂本地接口,是相對運行在Java虛擬機“沙箱”中的Java程序而言的,指直接運行在操作系統之上,與操作系統直接交互的程序。
???
JNI技術架構
???? 可以形象直觀地把JNI看做是Java和本地應用程序的黏合劑。
????????
??? 缺點:JNI犧牲了Java的平臺移植性、JNI提高了應用系統之間的耦合度。
??? 使用JNI調用本地程序接口的情況:
?????? -- 為了實現Java語言所不能實現的功能:例如關閉系統、獲取CPU繁忙程度等。
?????? -- 為了獲取更好的程序運行性能:和其他語言一樣,Java程序運行的性能很大程度上取決于程序代碼的編寫質量,但? 是在一些實時性要求高的應用場合,以“半編譯”形態出現的Java語言是難以勝任的,這時借助運行性能更佳的本地程序來完成這些關鍵任務更為合理。
?????? -- 為了保護歷史投資
2、調用C程序
??? 步驟:
??? (1) 編寫主調方的Java類。該類要聲明將調用的C函數,一方面載入本地的動態鏈接庫文件(即.dll文件)。
??? (2) 使用javac命令編譯Java類。
??? (3) 使用javah命令為C程序生成頭文件(即.h文件)。在自動生成的頭文件中將聲明有待實現的C函數。
??? (4) 編寫C程序。在C程序中實現頭文件中聲明的函數。
??? (5) 將C程序文件編譯成動態鏈接庫文件。
public class HelloWorld { public native void displayHelloWorld();// 定義本地方法 public native void displayMyName();// 定義本地方法 /* * 調入本地庫,Java程序將在java.library.path參數所指向的路徑,以及PATH環境變量所指向的路徑中尋找并載入hello.dll文件。 * 可以使用System.load()以絕對路徑的方式載入動態鏈接庫, * 例如:System.load("e:/somelibrary.dll")。在采用System.load()的情況下,不必設置環境變量和參數。 */ static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); new HelloWorld().displayMyName(); } }
??本地方法和接口方法:
????? Interface中聲明的只是方法的結構而已,可以認為是對方法做出的定義,Interface自身并不實現方法,更沒有能力提供方法;而native方法卻可以認為是Class自身提供的方法,只不過這種方法不是由自身來實現的,而是依靠本地動態鏈接庫輸出的函數。
????? 在Java中調用native方法和調用普通方法是完全相同的。
參考:
http://book.csdn.net/bookfiles/606/10060619592.shtml
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
