在這篇文章中,我們將看到 Java 中原生方法的詳細解釋。我們將看到它的基本語法及其工作原理。將會有 Java 程式碼範例展示本機方法的使用。
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
以下是 Java 中如何使用本機方法的基本語法:
[ public / protected / private] native [return-type] methodName ();
上面的語法顯示如何在 Java 中宣告本機方法。與常規方法類似,它需要定義存取修飾符,後面跟著 native 關鍵字,然後是方法的傳回類型,最後是指定了任何必要輸入參數的方法名稱。
我們可以定義為用Java以外的語言實作的方法,例如C/C++。使用此類方法背後的整體想法可能是利用 C/C++ 中可用的高效能或記憶體管理。
為了支援用其他語言編寫的方法,Java 提供了一個稱為 Java Native Interface 的接口,它充當 Java 和其他語言之間的中介。使用 JNI 的動機來自於它提供程式碼可重複使用性和高效能的能力。請注意,用 C/C++ 等其他語言編寫的程式碼不可移植。
以下是Java原生介面的主要元件:
現在我們將看到一個範例,它可以清楚地理解 Java 中的原生方法是如何運作的。以下是使用本機方法所涉及的步驟:
下面的例子將分為兩部分:java程式碼和native程式碼。
這是包含本機方法的 Java 類別。
代碼:
package com.edubca.nativedemo; 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 Edubca")); } }
上面的範例包含在 NativeDemo 類別中宣告的本機方法。我們已經用 C 語言編寫了 encryptData 方法的實作。如您所見,我們使用了一個靜態區塊,其目的是載入可實作 encryptData 方法的本機 C 函式庫。一個重要的注意事項是,您應該提供封閉 Java 類別的小寫名稱作為 System.loadLibrary 方法中的字串參數。按照上面聲明的步驟,是時候編譯我們的 java 程式碼了。
以下指令編譯上述java程式碼。
在下一步中,我們將使用 javah 實用程式建立一個頭文件,如下所述。
上面的指令會產生一個與類別名稱同名的javah檔。在編寫本機方法的 C 實作時,應該包含此文件。
這是本機函數 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 }
如果一切順利,您將看到以下輸出:
透過上面的文章,我們已經有了清晰的認識。大多數用 Java 編寫的即時應用程式都利用本機方法來獲得 C/C++ 等本機程式語言中提供的效能和記憶體管理優勢。
以上是Java 中的本機方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!