översikt
i den här snabba handledningen diskuterar vi begreppet native keyword i Java, och vi visar också hur man integrerar native methods i Java-kod.
det ursprungliga nyckelordet i Java
Låt oss först och främst diskutera vad som är ett inbyggt nyckelord i Java.
enkelt uttryckt är detta en icke-åtkomstmodifierare som används för att komma åt metoder som implementeras på ett annat språk än Java som C/C++.
det indikerar plattformsberoende implementering av en metod eller kod och fungerar också som ett gränssnitt mellan JNI och andra programmeringsspråk.
native Methods
en native method är en Java-metod (antingen en instansmetod eller en klassmetod) vars implementering också skrivs i ett annat programmeringsspråk som C/c++.
Dessutom kan en metod markerad som native inte ha en kropp och bör sluta med en semikolon:
native method ();
Vi kan använda dem för att:
- implementera ett gränssnitt med systemanrop eller bibliotek skrivna på andra programmeringsspråk
- åtkomstsystem eller hårdvaruresurser som bara kan nås från det andra språket
- integrera redan befintlig äldre kod skriven i C/C++ i en Java-applikation
- anropa ett kompilerat dynamiskt laddat bibliotek med godtycklig kod från Java
exempel
låt oss nu visa hur vi integrerar dessa metoder i vår Java-kod.
4.1. Åtkomst till inbyggd kod i Java
Låt oss först och främst skapa en klass DateTimeUtils som behöver komma åt en plattformsberoende inbyggd metod som heter getSystemTime:
public class DateTimeUtils { public native String getSystemTime(); // ...}
för att ladda den använder vi systemet.loadLibrary.
Låt oss placera samtalet för att ladda detta bibliotek i ett statiskt block så att det är tillgängligt i vår klass:
public class DateTimeUtils { public native String getSystemTime(); static { System.loadLibrary("nativedatetimeutils"); }}
Vi har skapat ett dynamiskt länkbibliotek, nativedatetimeutils, som implementerar getSystemTime i C++ med detaljerade instruktioner som omfattas av vår guide till JNI-artikel.
4.2. Testa native Methods
slutligen, låt oss se hur vi kan testa native methods definierade i datetimeutils-klassen:
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()); }}
nedan är utgången från logger:
INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018
som vi kan se, med hjälp av det inbyggda nyckelordet, kan vi framgångsrikt få tillgång till en plattformsberoende implementering skriven på ett annat språk (i vårt fall c++).
slutsats
i den här artikeln har vi lärt oss grunderna i inbyggda nyckelord och metoder. Med ett snabbt exempel har vi också lärt oss hur man integrerar dem i Java.
kodavsnitten som används i den här artikeln är tillgängliga via Github.
Kom igång med Spring 5 och Spring Boot 2, genom Learn Spring course:
>> kolla in kursen