溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中Native關(guān)鍵字怎么用

發(fā)布時(shí)間:2021-12-27 14:41:14 來源:億速云 閱讀:221 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Java中Native關(guān)鍵字怎么用,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

一、Java中Native關(guān)鍵字的語(yǔ)法

本機(jī)代碼的語(yǔ)法與普通函數(shù)定義相同,在函數(shù)開頭添加了“native”關(guān)鍵字。

例如:

Public class testing
{public native String testMethod (String parameter);}

在這里,public是一個(gè)訪問修飾符。它應(yīng)該是公共的,以便其他文件可以使用它。字符串是函數(shù)的返回?cái)?shù)據(jù)類型。它可以是整數(shù)、字符或布爾值,具體取決于關(guān)鍵字。傳遞給此函數(shù)的參數(shù)也是數(shù)據(jù)類型字符串。一切都應(yīng)該保持在社會(huì)底層。

在函數(shù)聲明之后,我們通過創(chuàng)建對(duì)象和加載庫(kù)來調(diào)用這個(gè)函數(shù)。

public static void main(String[] args)
{
System.loadLibrary("testing");
testing testingnew = new testing();
String  output   = testingnew.stringMethod("NATIVE");
}

應(yīng)首先加載上面定義的庫(kù),并創(chuàng)建對(duì)象。在這個(gè)對(duì)象的幫助下,本機(jī)函數(shù)被調(diào)用。

二、Native關(guān)鍵字是如何工作的?

應(yīng)該有兩個(gè)文件。一個(gè)包含JAVA代碼,而另一個(gè)應(yīng)該包含C/C++遺留代碼。Java代碼將用于調(diào)用遺留代碼。此遺留代碼將與硬件交互并返回預(yù)期輸出。

當(dāng)遺留代碼與硬件交互時(shí),它將不會(huì)遵循JAVA制定的準(zhǔn)則。此代碼將執(zhí)行所需的處理,以獲得輸出并將結(jié)果傳遞給JNI。Java本機(jī)接口隨后將檢入其目錄,其中包含與本機(jī)代碼相關(guān)的所有規(guī)則(這在SDK中位于名為javah.exe的文件下)。JNI是作為Java工具包的一部分設(shè)計(jì)的。在此處理之后,JAVA將以JAVA語(yǔ)言本身發(fā)布輸出。當(dāng)我們創(chuàng)建JAVA程序時(shí),我們必須確保JAVA文件和遺留文件之間有一個(gè)變量/數(shù)據(jù)流鏈接,以便兩者之間有一個(gè)平滑的數(shù)據(jù)流。

下面給出了解釋如何使用本機(jī)關(guān)鍵字的步驟:

  • 1. 編寫包含本機(jī)方法、已加載的共享庫(kù)的JAVA代碼,并使用“filename.JAVA”保存它。

  • 2. 編譯JAVA代碼并將代碼轉(zhuǎn)換為字節(jié)碼。

  • 3. 創(chuàng)建包含應(yīng)調(diào)用的本機(jī)函數(shù)簽名的C/C++頭文件。

  • 4. 編寫C/C++代碼有一個(gè)本機(jī)方法的實(shí)現(xiàn)。

  • 5. 運(yùn)行JAVA可執(zhí)行文件以查看結(jié)果。

三、代碼示例

我們?cè)?code>Eclipse中編寫代碼并運(yùn)行代碼來創(chuàng)建一個(gè)庫(kù),然后使用該庫(kù)來實(shí)現(xiàn)C代碼。

代碼:

public class JPP {
public static native void pAccess();
public static native int pRead();
public static native void pWrite(int port, int output);
static{
System.loadLibrary("JPPlibs");
}
public void jAccess(){
JPP.pAccess();
}
public int jRead(){
return JPP.pRead();
}
public void jWrite(int port, int output){
JPP.pWrite(port, output);
}
}

在將此代碼保存到j(luò)ava項(xiàng)目的新“類”中之后,我們必須設(shè)置一個(gè)運(yùn)行環(huán)境來生成頭文件。

Java中Native關(guān)鍵字怎么用

當(dāng)我們運(yùn)行這個(gè)程序時(shí),應(yīng)該生成一個(gè)庫(kù)。

輸出:

這里我們從java代碼創(chuàng)建了頭文件,它將本地代碼和java語(yǔ)言鏈接起來。

Java中Native關(guān)鍵字怎么用

四、Java中Native關(guān)鍵字的優(yōu)勢(shì)

下面給出了一些優(yōu)點(diǎn):

  • 它為JAVA提供了一個(gè)額外的優(yōu)勢(shì),可以與用其他語(yǔ)言編寫的代碼交互,并減少用JAVA編寫相同代碼的工作量,從而減少代碼冗余。

  • 它提高了總體代碼性能。由于代碼是用其他語(yǔ)言編寫的,因此使用機(jī)器語(yǔ)言時(shí)可能比使用JAVA更快。然后我們可以使用JAVA程序調(diào)用此代碼。

  • 使用這種方法,我們可以直接進(jìn)行系統(tǒng)調(diào)用。降低外部干擾的概率,提高代碼執(zhí)行速度。

  • 您可以使用用JAVA編寫的任意驅(qū)動(dòng)代碼動(dòng)態(tài)調(diào)用預(yù)加載的庫(kù)(用JAVA以外的任何語(yǔ)言編寫),仍然可以用JAVA獲得響應(yīng)。

  • 它使JAVA能夠訪問硬件資源,而這些硬件資源只能由其他語(yǔ)言使用。

  • 如果您已經(jīng)為應(yīng)用程序構(gòu)建了一個(gè)依賴于平臺(tái)的代碼,并且其功能不受JAVA支持,那么我們可以使用本機(jī)代碼,并通過native關(guān)鍵字將本機(jī)代碼鏈接到JAVA。

五、規(guī)則

native關(guān)鍵字的規(guī)則如下所示:

native關(guān)鍵字將在方法名稱之前使用。

  • native方法聲明沒有正文,應(yīng)該以分號(hào)結(jié)尾,因?yàn)檫@些方法不是在JAVA中定義的,而是在C/C++語(yǔ)言中出現(xiàn)的。

  • native方法不能聲明為抽象方法。

  • 由于無(wú)法保證以前的舊代碼是否按照IEEE 754標(biāo)準(zhǔn)編寫(IEEE浮點(diǎn)算法標(biāo)準(zhǔn)是1985年由電氣和電子工程師協(xié)會(huì)制定的浮點(diǎn)算法技術(shù)標(biāo)準(zhǔn)),因此我們不能將這些原生方法聲明為嚴(yán)格FTP。

  • JAVA設(shè)計(jì)JAVA本機(jī)native接口(JNI)規(guī)范來定義實(shí)現(xiàn)本機(jī)方法的規(guī)則和聲明,如JAVA和native代碼之間的數(shù)據(jù)類型轉(zhuǎn)換。

關(guān)于“Java中Native關(guān)鍵字怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI