首頁 > Java > java教程 > 主體

Java 中的本機方法

PHPz
發布: 2024-08-30 15:41:22
原創
468 人瀏覽過

在這篇文章中,我們將看到 Java 中原生方法的詳細解釋。我們將看到它的基本語法及其工作原理。將會有 Java 程式碼範例展示本機方法的使用。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

以下是 Java 中如何使用本機方法的基本語法:

[ public / protected / private] native [return-type] methodName ();
登入後複製

上面的語法顯示如何在 Java 中宣告本機方法。與常規方法類似,它需要定義存取修飾符,後面跟著 native 關鍵字,然後是方法的傳回類型,最後是指定了任何必要輸入參數的方法名稱。

Java 中本機方法如何運作?

我們可以定義為用Java以外的語言實作的方法,例如C/C++。使用此類方法背後的整體想法可能是利用 C/C++ 中可用的高效能或記憶體管理。

為了支援用其他語言編寫的方法,Java 提供了一個稱為 Java Native Interface 的接口,它充當 Java 和其他語言之間的中介。使用 JNI 的動機來自於它提供程式碼可重複使用性和高效能的能力。請注意,用 C/C++ 等其他語言編寫的程式碼不可移植。

以下是Java原生介面的主要元件:

  • javah: Java 開發工具包中提供了此工具,它可以從包含本機方法的現有 java 檔案 java 類別建立與 C 相容的頭檔。
  • h: 這是 Java 開發工具包中提供的基於 C/C++ 的頭文件,提供 Java 資料類型和本機資料類型之間的對應。上述 Javah 檔案會自動產生此檔案。

Java 中的本機方法範例

現在我們將看到一個範例,它可以清楚地理解 Java 中的原生方法是如何運作的。以下是使用本機方法所涉及的步驟:

  • 編寫java程式碼。
  • 編譯java程式碼。
  • 建立一個 C 頭檔。
  • 在 C/C++ 中實作本機方法邏輯。
  • 建立共享庫。
  • 運行並測試 java 應用程式。

下面的例子將分為兩部分:java程式碼和native程式碼。

第 1 部分:Java

這是包含本機方法的 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程式碼。

Java 中的本機方法

在下一步中,我們將使用 javah 實用程式建立一個頭文件,如下所述。
Java 中的本機方法

上面的指令會產生一個與類別名稱同名的javah檔。在編寫本機方法的 C 實作時,應該包含此文件。

第 2 部分: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
}
登入後複製
  • 以上文件是用NativeDemo.c儲存的。
  • 從上面的程式碼我們可以看到加密的邏輯是用C語言寫的。該邏輯基於用 @ 替換所有元音並返回字串。
  • 下一步,將使用以下指令編譯上述 C 程式碼:

Java 中的本機方法

  • 上面的指令建立了一個共享函式庫,供java程式層呼叫C編寫的程式碼。我們可以根據我們的編譯器和作業系統使用不同的編譯策略。
  • 完成上述步驟後,我們可以像下面這樣呼叫運行我們的java程式碼:

Java 中的本機方法

如果一切順利,您將看到以下輸出:

Java 中的本機方法

結論

透過上面的文章,我們已經有了清晰的認識。大多數用 Java 編寫的即時應用程式都利用本機方法來獲得 C/C++ 等本機程式語言中提供的效能和記憶體管理優勢。

以上是Java 中的本機方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!