欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的Native關(guān)鍵字講解

 更新時(shí)間:2022年01月25日 13:03:28   作者:老K的Java博客  
本文介紹了Java中的Native關(guān)鍵字,native關(guān)鍵字是架起本機(jī)語(yǔ)言和JAVA之間鴻溝的橋梁。如果我們的軟件與硬件的交互在使用預(yù)先存在的代碼時(shí)更有效,那么這可以作為一個(gè)關(guān)鍵環(huán)節(jié)。與從頭開始設(shè)計(jì)新的應(yīng)用程序代碼相比,只要可以避免,它就可以使實(shí)現(xiàn)工作更少,下面來(lái)了解集體內(nèi)容

前言:

native關(guān)鍵字充當(dāng)JAVA語(yǔ)言與除JAVA之外的其他語(yǔ)言編寫的代碼塊或庫(kù)之間的鏈接,這可能取決于您操作的機(jī)器。如果將native關(guān)鍵字應(yīng)用于一個(gè)方法,那么這意味著該方法將通過(guò)JNI(JAVA native interface)使用其他語(yǔ)言(如C或C++)編寫的本機(jī)代碼來(lái)實(shí)現(xiàn)。

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

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

例如:

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


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

在函數(shù)聲明之后,我們通過(guò)創(chuàng)建對(duì)象和加載庫(kù)來(lái)調(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)行代碼來(lái)創(chuàng)建一個(gè)庫(kù),然后使用該庫(kù)來(lái)實(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)境來(lái)生成頭文件。

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

輸出:

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

四、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能夠訪問(wèn)硬件資源,而這些硬件資源只能由其他語(yǔ)言使用。
  • 如果您已經(jīng)為應(yīng)用程序構(gòu)建了一個(gè)依賴于平臺(tái)的代碼,并且其功能不受JAVA支持,那么我們可以使用本機(jī)代碼,并通過(guò)native關(guān)鍵字將本機(jī)代碼鏈接到JAVA。

五、規(guī)則

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

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

  • native方法聲明沒(méi)有正文,應(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ī)范來(lái)定義實(shí)現(xiàn)本機(jī)方法的規(guī)則和聲明,如JAVA和native代碼之間的數(shù)據(jù)類型轉(zhuǎn)換。

六、總結(jié)

native關(guān)鍵字是架起本機(jī)語(yǔ)言和JAVA之間鴻溝的橋梁。如果我們的軟件與硬件的交互在使用預(yù)先存在的代碼時(shí)更有效,那么這可以作為一個(gè)關(guān)鍵環(huán)節(jié)。與從頭開始設(shè)計(jì)新的應(yīng)用程序代碼相比,只要可以避免,它就可以使實(shí)現(xiàn)工作更少。

相關(guān)文章

最新評(píng)論