A natív kulcsszó bemutatása:
A natív kulcsszó a JAVA nyelv és a JAVA-n kívül más nyelveken írt kódrészletek vagy könyvtárak közötti kapcsolatként működik, ami függhet attól, hogy milyen gépen dolgozol. Ha a natív kulcsszó egy metódusra vonatkozik, akkor ez azt jelenti, hogy a metódus valamilyen más nyelven (például C vagy C++) írt natív kóddal lesz implementálva a JNI-n (JAVA natív interfész) keresztül.
Szintaxis:
A natív kód szintaxisa ugyanaz, mint a normál függvénydefinícióé, azzal, hogy a függvény elejére “natív” kulcsszó kerül.
Példa:
Public class testing
{public native String testMethod (String parameter);}
A public itt egy hozzáférés-módosító. Azért kell nyilvánosnak lennie, hogy egy másik fájl is használhassa. String a függvény visszatérési adattípusa. A kulcsszótól függően lehet egész szám, karakter vagy Boolean. A függvénynek átadott paraméter is string adattípusú. Mindent az osztály alatt kell tartani.
A függvény deklarálása után a létrehozott objektumon és a betöltött könyvtáron keresztül hívjuk meg ezt a függvényt.
public static void main(String args)
{
System.loadLibrary(“testing”);
tesztelés testingnew = new testing();
String output = testingnew.stringMethod(“NATIVE”);
}
A fent definiált könyvtárat kell először betölteni és a n annak objektumát létrehozni. Ennek az objektumnak a segítségével hívjuk meg a natív függvényt.
Hogyan működik a natív kulcsszó?
Két fájlnak kell lennie. Az egyik a JAVA kódot tartalmazza, míg a másiknak C/C++ örökölt kódot kell tartalmaznia. A Java kódot az örökölt kód hívására fogjuk használni. Ez az örökölt kód kölcsönhatásba lép a hardverrel, és az elvárt kimenetet adja vissza.
Amikor az örökölt kód kölcsönhatásba lép a hardverrel, akkor nem fogja követni a JAVA által meghatározott irányelveket. Ez a kód elvégzi a kívánt feldolgozást, hogy megkapja a kimenetet, és átadja az eredményeket a JNI-nek. A Java natív interfész ezután ellenőrizni fogja a natív kódra vonatkozó összes szabályt tartalmazó könyvtárában (Ez az SDK-ban a javah.exe nevű fájl alatt található). A JNI-t a Java eszközkészlet részeként tervezték. A feldolgozás után a JAVA a kimeneteket magában a JAVA nyelvben teszi közzé. Amikor programot hozunk létre JAVA-ban, akkor gondoskodnunk kell arról, hogy a JAVA fájl és az örökölt fájl között legyen egy változó/adatáramlási kapcsolat, hogy mindkettő között zökkenőmentes legyen az adatáramlás.
A natív kulcsszavak használatát magyarázó lépések az alábbiakban találhatók:
- A natív módszert tartalmazó JAVA kódot, a betöltött megosztott könyvtárat és a “filename.JAVA”.
- Kompilálja a JAVA kódot, és konvertálja a kódot bytecode-ba.
- Készítsen C/C++ fejlécfájlt, amely tartalmazza a meghívandó natív függvény aláírását.
- A natív módszer végrehajtását tartalmazó C/C++ kódot.
- Futtassa a JAVA futtatható fájlt az eredmények megtekintéséhez.
Példák a natív kulcsszó implementációjának bemutatására:
Kódot kell írnunk az Eclipse-ben, és a kódot futtatva létrehozni egy könyvtárat, amelynek segítségével aztán a C kódot implementáljuk.
Kód: package com.slackerOne;
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);
}
}
A kód elmentése után a java projekt új “osztályában”. Be kell állítanunk a futtatási környezetet a fejlécfájl generálásához.
Előnyök:
- A JAVA számára további előnyt jelent a más nyelven írt kóddal való interakció, és csökkenti a munkát, hogy ugyanazt a kódot JAVA-ban írjuk, ezáltal csökkenti a kód redundanciáját.
- A kód általános teljesítményét javítja. Mivel a más nyelven írt kód talán gyorsabb, ha a JAVA-hoz képest a gépi nyelvvel dolgozik. Ezt a kódot aztán JAVA programmal hívhatjuk meg.
- Ezzel a megközelítéssel közvetlenül rendszerhívásokat adhatunk. Csökkenti a külső beavatkozás valószínűségét, és javítja a kódvégrehajtás gyorsaságát.
- Dinamikusan meghívhatunk egy előre betöltött (a JAVA-tól eltérő nyelven írt) könyvtárat egy tetszőleges, JAVA-ban írt vezérlő kóddal, és mégis JAVA-ban kapunk választ.
- A JAVA számára elérhetővé teszi a hardveres erőforrások elérését, amelyek csak más nyelvek számára állnak rendelkezésre.
- Abban az esetben, ha az alkalmazásunkhoz már felépítettünk egy platformfüggő kódot, amelynek jellemzői nem támogatottak a JAVA-n keresztül, ebben az esetben rendelkezhetünk natív kóddal, és ezt a natív kódot a natív kulcsszóval összekapcsolhatjuk a JAVA-val.
Szabályok:
- A natív kulcsszót a metódusnév előtt kell használni.
- A natív metódus deklarációnak nincs teste, és kettősponttal kell végződnie, mivel ezek a metódusok nem a JAVA-ban vannak definiálva, hanem a C/C++ nyelvben.
- A natív metódusokat nem lehet absztrakt metódusként deklarálni.
- Mivel nem biztos, hogy az előző régi kód az IEEE 754 szabvány szerint íródott (Az IEEE Standard for Floating-Point Arithmetic az Institute of Electrical and Electronics Engineers által 1985-ben létrehozott technikai szabvány a lebegőpontos aritmetikára), így ezeket a natív metódusokat nem deklarálhatjuk strictftp-ként.
- A Java Native Interface (JNI) specifikációt a JAVA úgy tervezte, hogy meghatározza a natív metódusok megvalósításához szükséges szabályokat és deklarációkat, például az adattípusok konverzióját a Java és a natív kód között.
Következtetés:
A natív kulcsszó az, ami hidat képez a natív nyelvek és a JAVA között. Ez kritikus összekötő kapocsként használható, ha szoftverünk hardverrel való kölcsönhatása inkább az, hogy az előzetesen meglévő kódot használva hatékony kódot kapjunk. Ahol ez elkerülhető, ott kisebbé teszi a megvalósítási munkát az új alkalmazáskód nulláról való megtervezéséhez képest.