native
egy java kulcsszó. Egy metódust jelöl, hogy az más nyelven lesz implementálva, nem Java nyelven. A metódus test nélkül van deklarálva, és nem lehet abstract
. A JNI-vel (Java Native Interface) együtt működik.
Szintaktika:
method();
A natív metódusokat régebben teljesítménykritikus szakaszok írására használták, de a java gyorsabbá válásával ez ma már ritkábban fordul elő. A natív metódusokra jelenleg akkor van szükség, ha
- A java-ból kell meghívni egy másik nyelven írt könyvtárat.
- El kell érni olyan rendszer- vagy hardvererőforrásokat, amelyek csak a másik nyelvből (jellemzően C-ből) érhetők el. Valójában sok, a valódi számítógéppel kölcsönhatásba lépő rendszerfüggvény (például lemez és hálózati IO) csak azért teheti ezt meg, mert natív kódot hív.
A natív metódus megírásának befejezéséhez az osztályodat a javah
eszközzel kell feldolgoznod, amely C nyelven generál egy fejléckódot. Ezután a fejléckód implementációját kell biztosítanod, dinamikusan betölthető könyvtárat (.so
Linux alatt, .dll
Windows alatt) kell létrehoznod és betöltened (a legegyszerűbb esetben a System.load(library_file_name)
. A kódkitöltés triviális, ha csak primitív típusok, például egész számok kerülnek átadásra, de bonyolultabbá válik, ha stringeket vagy objektumokat kell cserélni a C kódból. Általában minden lehet C szintű, beleértve az új objektumok létrehozását és a java nyelven írt metódusok visszahívását is.
Ahhoz, hogy a kódot valamilyen más nyelven (beleértve a C++-t is) hívjuk, hidat kell írni a C-ből az adott nyelvre. Ez általában triviális, mivel a legtöbb nyelv meghívható a C-ből.