Java中的Native方法
以下是java中如何使用native方法的基本語法:
[ public / protected / private] native [return-type] methodName ();
上面的語法顯示瞭如何在java
中聲明本機方法。與普通方法一樣,它需要定義一個訪問修飾符,後跟一個native關鍵字,後跟方法的返回類型,最後是方法名稱,如果需要,還需要指定輸入參數。
1.Native方法在Java中如何工作?
它可以定義為那些用java以外的語言(如C/C++)實現的方法。使用這些方法背後的總體思路可能是利用C/C++
中提供的高性能或內存管理。
為瞭支持用其他語言編寫的方法,Java提供瞭一個稱為Java Native Interface的接口,它充當Java和其他語言之間的中介。使用JNI的動機來自這樣一個事實:它可以提供代碼重用性和高性能。需要註意的是,用C/C++等其他語言編寫的代碼是不可移植的。
以下是Java本機native接口的主要組件:
javah
:這是java開發工具包中提供的一個工具,它從包含native方法的現有java文件java類中創建與C兼容的頭文件。h
:這是Java開發工具包中提供的基於C/C++的頭文件,其功能是提供Java數據類型和native數據類型之間的映射。上面描述的Javah文件自動生成這個文件。
2.Java中Native方法的示例
現在我們將看到一個示例,它將清楚地瞭解native方法在java中的工作方式。以下是使用native方法所涉及的步驟:
- 1. 編程java代碼。
- 2. 編譯java代碼。
- 3. 創建一個C頭文件。
- 4. 在C/C++中實現
native
方法邏輯。 - 5. 創建一個共享庫。
- 6. 運行並測試java應用程序。
下面的示例將分為兩部分:具有java代碼和具有native代碼。
第1部分:Java
下面是包含native方法的java類。
代碼:
class NativeDemo { public native String encryptData (String inputdata); static { System.loadLibrary ("nativedemo"); /* lowercase of classname! */ } public static void main (String[] args) { NativeDemo demo = new NativeDemo (); System.out.println("Encrypted data is " + demo.encryptData ("This is javakk")); } }
上面的示例包含在NativeDemo
類中聲明的native
方法。encryptData
方法的實現是用C編寫的。如您所見,我們使用瞭一個靜態塊,其目的是加載encryptData
方法實現可用的本機C庫。需要註意的一件重要事情是系統中提供的字符串參數。loadLibrary
方法是封閉java類的小寫名稱。現在,按照上面聲明的步驟,是時候編譯我們的java代碼瞭。
下面的命令編譯上述java代碼。
javac NativeDemo
現在在下一步中,我們將使用javah實用程序創建一個頭文件,如下所述。
javah -jni NativeDemo
上面的命令將生成一個與類名稱同名的javah文件。在編寫native方法的C實現時,將包含此文件。
第2部分:C代碼
下面是native
函數encryptData
的C實現。
代碼:
#include <jni.h> #include <stdio.h> #include "NativeDemo.h" JNIEXPORT void JNICALL Java_NativeDemo_encryptData(JNIEnv *env, jobject obj, jstring inputstr) { const char *str= (*env)->GetStringUTFChars(env,inputstr,0) // create string from jstring char Newch = '@'; for(i = 0; i <= strlen(str); i++) { if(str[i] == 'a' || str[i]== 'e' || str[i]== 'i' || str[i]== 'o' || str[i]== 'u' || str[i] == 'A' || str[i]== 'E' || str[i]== 'I' || str[i]== 'O' || str[i]== 'U') { str[i] = Newch; } } return env->NewStringUTF(str); // convert string to jstring }
- 以上文件與
NativeDemo.c
一起保存 - 從上面的代碼中,我們可以看到加密邏輯是用C語言編寫的。這個邏輯隻是基於將所有元音替換為@並返回字符串。
- 編譯上述C代碼
- 使用命令編譯代碼
- 上面的命令創建瞭一個共享庫,java編程層使用該庫調用用C編寫的代碼。我們可以根據編譯器和操作系統使用不同的編譯策略。
完成上述步驟後,我們可以調用運行java代碼,如下所示:
java NativeDemo
如果一切順利,您將看到以下輸出:
Encrypted data is th@s @s @d@bc@
3.總結
從上面的文章中,我們對它有瞭一個清晰的認識。大多數用java編寫的實時應用程序都使用native
本機方法來獲取性能以及本機編程語言(如C/C++)中可用的內存管理優勢。
到此這篇關於Java
中的Native
方法的文章就介紹到這瞭,更多相關Java Native
方法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!