native
jest słowem kluczowym javy. Oznacza ono metodę, że będzie ona zaimplementowana w innych językach, nie w Javie. Metoda jest deklarowana bez ciała i nie może być abstract
. Działa ona razem z JNI (Java Native Interface).
Syntaktyka:
method();
Natywne metody były używane w przeszłości do pisania sekcji krytycznych pod względem wydajności, ale z coraz szybszą Javą jest to teraz mniej powszechne. Metody natywne są obecnie potrzebne, gdy
- Trzeba wywołać z java bibliotekę, napisaną w innym języku.
- Trzeba uzyskać dostęp do zasobów systemowych lub sprzętowych, które są osiągalne tylko z innego języka (zazwyczaj C). Właściwie wiele funkcji systemowych, które wchodzą w interakcję z prawdziwym komputerem (na przykład IO dysku i sieci), może to zrobić tylko dlatego, że wywołują natywny kod.
Aby dokończyć pisanie natywnej metody, musisz przetworzyć swoją klasę za pomocą javah
narzędzia, które wygeneruje kod nagłówkowy w C. Następnie musisz zapewnić implementację kodu nagłówkowego, wyprodukować dynamicznie ładowalną bibliotekę (.so
pod Linuksem, .dll
pod Windows) i załadować ją (w najprostszym przypadku za pomocą System.load(library_file_name)
. Uzupełnianie kodu jest trywialne, jeśli przekazywane są tylko prymitywne typy, takie jak liczby całkowite, ale staje się bardziej złożone, jeśli trzeba wymieniać łańcuchy lub obiekty z kodu C. Ogólnie rzecz biorąc, wszystko może być na poziomie C, łącznie z tworzeniem nowych obiektów i wywoływaniem metod napisanych w Javie.
Aby wywołać kod w innym języku (w tym C++), trzeba napisać mostek z C do tego języka. Jest to zazwyczaj trywialne, ponieważ większość języków jest wywoływalna z C.