您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Java中Native關(guān)鍵字怎么用,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
本機(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)用。
應(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)境來生成頭文件。
當(dāng)我們運(yùn)行這個(gè)程序時(shí),應(yīng)該生成一個(gè)庫(kù)。
輸出:
這里我們從java代碼創(chuàng)建了頭文件,它將本地代碼和java語(yǔ)言鏈接起來。
下面給出了一些優(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。
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)把它分享出去讓更多的人看到。
免責(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)容。