overzicht
in deze korte handleiding zullen we het concept van het native keyword in Java bespreken, en we zullen ook laten zien hoe inheemse methoden in Java-code te integreren.
het standaard sleutelwoord in Java
laten we eerst bespreken wat een standaard sleutelwoord in Java is.
simpel gezegd, dit is een non-access modifier die wordt gebruikt om toegang te krijgen tot methoden die zijn geà mplementeerd in een andere taal dan Java, zoals C / C++.
Het geeft platformafhankelijke implementatie van een methode of code aan en fungeert ook als een interface tussen JNI en andere programmeertalen.
native Methods
een native method is een Java methode (ofwel een instance methode of een class methode) waarvan de implementatie ook geschreven is in een andere programmeertaal, zoals C/C++.
bovendien kan een methode gemarkeerd als native geen body hebben en moet deze eindigen met een puntkomma:
native method ();
we kunnen ze gebruiken om:
- implementeer een interface met systeemaanroepen of bibliotheken geschreven in andere programmeertalen
- toegangssysteem of hardwarebronnen die alleen bereikbaar zijn vanuit de andere taal
- integreer reeds bestaande legacy code geschreven in C/C++ in een Java-toepassing
- aanroep een gecompileerde dynamisch geladen bibliotheek met willekeurige code uit Java
voorbeelden
laten we nu demonstreren hoe deze methoden in onze Java-code te integreren.
4.1. Toegang tot Native Code in Java
laten we eerst een class DateTimeUtils maken die toegang nodig heeft tot een platform-afhankelijke native methode genaamd getSystemTime:
public class DateTimeUtils { public native String getSystemTime(); // ...}
om het te laden, gebruiken we het systeem.loadLibrary.
laten we de aanroep plaatsen om deze bibliotheek in een statisch blok te laden, zodat deze beschikbaar is in onze klasse:
public class DateTimeUtils { public native String getSystemTime(); static { System.loadLibrary("nativedatetimeutils"); }}
we hebben een dynamic-link library, nativedatetimeutils, gemaakt die getSystemTime implementeert in C++ met behulp van gedetailleerde instructies behandeld in onze gids voor JNI artikel.
4.2. Testing native Methods
ten slotte, laten we eens kijken hoe we native methods kunnen testen gedefinieerd in de datetimeutils klasse:
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()); }}
Hieronder is de uitvoer van de logger:
INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018
zoals we kunnen zien, met behulp van het native sleutelwoord, zijn we succesvol in staat om toegang te krijgen tot een platform-afhankelijke implementatie geschreven in een andere taal (in ons geval C++).
conclusie
In dit artikel hebben we de basis van inheemse sleutelwoorden en methoden geleerd. Met een snel voorbeeld, we hebben ook geleerd hoe ze te integreren in Java.
de codefragmenten die gebruikt worden in dit artikel zijn beschikbaar via Github.
aan de slag met Spring 5 en Spring Boot 2, Via de learn Spring course:
>> bekijk de cursus