1. Общ преглед
В този бърз урок ще обсъдим концепцията за родната ключова дума в Java и ще покажем също как да интегрираме родните методи в Java кода.
2. Родната ключова дума в Java
Първо, нека обсъдим какво е естествена ключова дума в Java.
Най-просто казано, това е модификатор без достъп, който се използва за достъп до методи, внедрени на език, различен от Java като C / C ++ .
Той показва, че изпълнението на метод или код зависи от платформата, а също така действа като интерфейс между JNI и други програмни езици.
3. родните методи
А родния метод е метод, Java (или метод инстанция или метод на клас), чието изпълнение е също написани на друг език за програмиране като C / C ++.
Освен това метод, означен като роден, не може да има тяло и трябва да завършва с точка и запетая:
[ public | protected | private] native [return_type] method ();
Можем да ги използваме за:
- внедряване на интерфейс със системни повиквания или библиотеки, написани на други езици за програмиране
- достъп до системни или хардуерни ресурси, които са достъпни само от другия език
- интегрирайте вече съществуващ стар код, написан на C / C ++, в Java приложение
- извикайте компилирана динамично заредена библиотека с произволен код от Java
4. Примери
Нека сега покажем как да интегрираме тези методи в нашия Java код.
4.1. Достъп до нативния код в Java
Първо, нека създадем клас DateTimeUtils, който трябва да има достъп до зависим от платформата роден метод, наречен getSystemTime :
public class DateTimeUtils { public native String getSystemTime(); // ... }
За да го заредим, ще използваме System.loadLibrary.
Нека поставим повикването за зареждане на тази библиотека в статичен блок, така че тя да е достъпна в нашия клас:
public class DateTimeUtils { public native String getSystemTime(); static { System.loadLibrary("nativedatetimeutils"); } }
Създадохме библиотека за динамична връзка, nativedatetimeutils , която реализира getSystemTime в C ++, използвайки подробни инструкции, описани в нашето ръководство за статия за JNI.
4.2. Тестване на местни методи
И накрая, нека видим как можем да тестваме естествени методи, дефинирани в класа 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()); } }
По-долу е изходът на регистратора:
[main] INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018
Както виждаме, с помощта на родната ключова дума имаме успешен достъп до платформа-зависима реализация, написана на друг език (в нашия случай C ++).
5. Заключение
В тази статия научихме основите на естествените ключови думи и методи. С бърз пример научихме и как да ги интегрираме в Java.
Кодовите фрагменти, използвани в тази статия, са достъпни през Github.