native
je klíčové slovo jazyka Java. Označuje metodu, která bude implementována v jiných jazycích, nikoli v Javě. Metoda je deklarována bez těla a nemůže být abstract
. Funguje společně s JNI (Java Native Interface).
Syntaxe:
method();
Nativní metody se v minulosti používaly pro zápis výkonově kritických úseků, ale se zrychlením Javy je to nyní méně časté. Nativní metody jsou v současnosti potřeba, když
- Potřebujete z javy zavolat knihovnu, napsanou v jiném jazyce.
- Potřebujete přistupovat k systémovým nebo hardwarovým prostředkům, které jsou dosažitelné pouze z jiného jazyka (typicky C). Ve skutečnosti mnoho systémových funkcí, které komunikují se skutečným počítačem (například diskové a síťové IO), to může dělat jen proto, že volají nativní kód.
Pro dokončení zápisu nativní metody musíte zpracovat svou třídu pomocí nástroje javah
, který vygeneruje hlavičkový kód v jazyce C. Poté musíte zajistit implementaci hlavičkového kódu, vytvořit dynamicky načítanou knihovnu (.so
pod Linuxem, .dll
pod Windows) a načíst ji (v nejjednodušším případě pomocí System.load(library_file_name)
. Doplnění kódu je triviální, pokud se předávají pouze primitivní typy, jako jsou celá čísla, ale stává se složitějším, pokud je třeba vyměnit řetězce nebo objekty z kódu C. Obecně lze říci, že vše může být na úrovni jazyka C, včetně vytváření nových objektů a zpětného volání metod, napsaných v javě.
Chcete-li volat kód v nějakém jiném jazyce (včetně C++), musíte napsat můstek z jazyka C do tohoto jazyka. To je obvykle triviální, protože většina jazyků je volatelná z jazyka C.