Overview
w tym krótkim samouczku omówimy koncepcję natywnego słowa kluczowego w Javie, a także pokażemy, jak zintegrować natywne metody z kodem Java.
natywne słowo kluczowe w Javie
przede wszystkim omówmy, co jest natywnym słowem kluczowym w Javie.
Mówiąc najprościej, jest to modyfikator non-access, który jest używany do dostępu do metod zaimplementowanych w języku innym niż Java, takim jak C / C++.
wskazuje zależną od platformy implementację metody lub kodu, a także działa jako interfejs między JNI a innymi językami programowania.
metody natywne
metoda natywna to metoda Java (metoda instancji lub metoda klasy), której implementacja jest również napisana w innym języku programowania, takim jak C / C++.
ponadto metoda oznaczona jako natywna nie może mieć ciała i powinna kończyć się średnikiem:
native method ();
możemy ich użyć do:
- zaimplementuj interfejs z wywołaniami systemowymi lub bibliotekami napisanymi w innych językach programowania
- uzyskaj dostęp do zasobów systemowych lub sprzętowych, które są dostępne tylko z innego języka
- Zintegruj już istniejący stary kod napisany w C/c++ z aplikacją Java
- wywołaj skompilowaną dynamicznie załadowaną bibliotekę z dowolnym kodem z Java
przykłady
zademonstrujmy teraz, jak zintegrować te metody z naszym kodem Java.
4.1. Dostęp do natywnego kodu w Javie
Po pierwsze, stwórzmy klasę DateTimeUtils, która musi uzyskać dostęp do zależnej od platformy natywnej metody getSystemTime:
public class DateTimeUtils { public native String getSystemTime(); // ...}
aby ją załadować, użyjemy systemu.loadLibrary.
umieśćmy wywołanie, aby załadować tę bibliotekę do bloku statycznego, aby była dostępna w naszej klasie:
public class DateTimeUtils { public native String getSystemTime(); static { System.loadLibrary("nativedatetimeutils"); }}
stworzyliśmy dynamiczną bibliotekę linkową nativedatetimeutils, która implementuje getSystemTime w C++, korzystając ze szczegółowych instrukcji zawartych w naszym artykule guide to JNI.
4.2. Testowanie natywnych metod
na koniec zobaczmy, jak możemy przetestować natywne metody zdefiniowane w klasie DateTimeUtils:
public class DateTimeUtilsManualTest { @BeforeClass public static void setUpClass() { // .. load other dependent libraries System.loadLibrary("nativedatetimeutils"); } @Test public void givenNativeLibsLoaded_thenNativeMethodIsAccessible() { DateTimeUtils dateTimeUtils = new DateTimeUtils(); LOG.info("System time is : " + dateTimeUtils.getSystemTime()); assertNotNull(dateTimeUtils.getSystemTime()); }}
poniżej znajduje się wyjście loggera:
INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018
jak widzimy, za pomocą natywnego słowa kluczowego jesteśmy w stanie z powodzeniem uzyskać dostęp do implementacji zależnej od platformy napisany w innym języku (w naszym przypadku c++).
podsumowanie
w tym artykule nauczyliśmy się podstaw natywnych słów kluczowych i metod. Dzięki szybkiemu przykładowi nauczyliśmy się również, jak zintegrować je w Javie.
fragmenty kodu użyte w tym artykule są dostępne na Githubie.
zacznij od Spring 5 i Spring Boot 2, Poprzez kurs Learn Spring:
>>sprawdź kurs