native
är ett nyckelord i Java. Det markerar att en metod kommer att implementeras i andra språk, inte i Java. Metoden deklareras utan kropp och kan inte abstract
. Det fungerar tillsammans med JNI (Java Native Interface).
Syntax:
method();
Nativa metoder användes tidigare för att skriva prestandakritiska avsnitt, men i och med att java blir snabbare är detta nu mindre vanligt. Nativa metoder behövs för närvarande när
- Du behöver anropa ett bibliotek, skrivet i ett annat språk, från java.
- Du behöver få tillgång till system- eller hårdvaruresurser som endast kan nås från det andra språket (vanligtvis C). Faktum är att många systemfunktioner som interagerar med en riktig dator (till exempel disk- och nätverks-IO) endast kan göra detta eftersom de anropar inhemsk kod.
För att slutföra skrivandet av en inhemsk metod måste du bearbeta din klass med javah
-verktyget som genererar en header-kod i C. Du måste sedan tillhandahålla en implementering av header-koden, producera ett dynamiskt laddningsbart bibliotek (.so
under Linux, .dll
under Windows) och ladda det (i det enklaste fallet med System.load(library_file_name)
. Kompletteringen av koden är trivial om endast primitiva typer som t.ex. heltal överförs, men blir mer komplicerad om det är nödvändigt att utbyta strängar eller objekt från C-koden. I allmänhet kan allt vara på C-nivå, inklusive skapandet av nya objekt och återkallande av metoder som är skrivna i java.
För att kalla koden i något annat språk (inklusive C++) måste man skriva en brygga från C till det språket. Detta är vanligtvis trivialt eftersom de flesta språk kan anropas från C.