在這篇文章中,我們將看到 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程式碼。
在下一步中,我們將使用 javah 實用程式建立一個頭文件,如下所述。
上面的指令會產生一個與類別名稱同名的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 NewStringUTF(str); // convert string to jstring }</stdio.h></jni.h>
- 以上文件是用NativeDemo.c儲存的。
- 從上面的程式碼我們可以看到加密的邏輯是用C語言寫的。該邏輯基於用 @ 替換所有元音並返回字串。
- 下一步,將使用以下指令編譯上述 C 程式碼:
- 上面的指令建立了一個共享函式庫,供java程式層呼叫C編寫的程式碼。我們可以根據我們的編譯器和作業系統使用不同的編譯策略。
- 完成上述步驟後,我們可以像下面這樣呼叫運行我們的java程式碼:
如果一切順利,您將看到以下輸出:
結論
透過上面的文章,我們已經有了清晰的認識。大多數用 Java 編寫的即時應用程式都利用本機方法來獲得 C/C++ 等本機程式語言中提供的效能和記憶體管理優勢。
以上是Java 中的本機方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

本文解釋了用於構建分佈式應用程序的Java的遠程方法調用(RMI)。 它詳細介紹了接口定義,實現,註冊表設置和客戶端調用,以解決網絡問題和安全性等挑戰。

本文詳細介紹了用於網絡通信的Java的套接字API,涵蓋了客戶服務器設置,數據處理和關鍵考慮因素,例如資源管理,錯誤處理和安全性。 它還探索了性能優化技術,我

本文詳細介紹了創建自定義Java網絡協議。 它涵蓋協議定義(數據結構,框架,錯誤處理,版本控制),實現(使用插座),數據序列化和最佳實踐(效率,安全性,維護


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境