Het native Java-sleutelwoord en de methoden

1. Overzicht

In deze korte tutorial bespreken we het concept van de native trefwoord in Java, en we laten ook zien hoe u kunt integreren native methoden in Java-code.

2. Het native Sleutelwoord in Java

Laten we eerst eens kijken wat een native trefwoord in Java.

Simpel gezegd, dit is een niet-toegangsmodificator die wordt gebruikt om toegang te krijgen tot methoden die zijn geïmplementeerd in een andere taal dan Java, zoals C / C ++.

Het geeft de platformafhankelijke implementatie van een methode of code aan en fungeert ook als interface tussen JNI en andere programmeertalen.

3. native Methoden

EEN native method is een Java-methode (ofwel een instantiemethode ofwel een klassemethode) waarvan de implementatie ook is geschreven in een andere programmeertaal zoals C / C ++.

Bovendien is een methode gemarkeerd als native mag geen hoofdtekst hebben en moet eindigen met een puntkomma:

[openbaar | beschermd | private] native [return_type] methode ();

We kunnen ze gebruiken om:

  • een interface implementeren met systeemoproepen of bibliotheken die in andere programmeertalen zijn geschreven
  • toegang krijgen tot systeem- of hardwarebronnen die alleen bereikbaar zijn vanuit de andere taal
  • integreer reeds bestaande legacy code geschreven in C / C ++ in een Java-applicatie
  • roep een gecompileerde dynamisch geladen bibliotheek aan met willekeurige code uit Java

4. Voorbeelden

Laten we nu demonstreren hoe we deze methoden in onze Java-code kunnen integreren.

4.1. Toegang tot native code in Java

Laten we eerst een klas maken DateTimeUtils dat toegang moet hebben tot een platformafhankelijke native methode met de naam getSystemTime:

openbare klasse DateTimeUtils {openbare native String getSystemTime (); // ...}

Om het te laden, gebruiken we de System.loadLibrary.

Laten we de aanroep plaatsen om deze bibliotheek te laden in een statisch blok zodat het beschikbaar is in onze klas:

openbare klasse DateTimeUtils {openbare native String getSystemTime (); statische {System.loadLibrary ("nativedatetimeutils"); }}

We hebben een Dynamic Link Library gemaakt, nativedatetimeutils, dat implementeert getSystemTime in C ++ met behulp van gedetailleerde instructies die worden behandeld in onze gids voor JNI-artikel.

4.2. Testen native Methoden

Laten we tot slot kijken hoe we native methoden kunnen testen die zijn gedefinieerd in het DateTimeUtils klasse:

openbare klasse DateTimeUtilsManualTest {@BeforeClass openbare statische leegte setUpClass () {// .. laad andere afhankelijke bibliotheken System.loadLibrary ("nativedatetimeutils"); } @Test openbare ongeldige gegevenNativeLibsLoaded_thenNativeMethodIsAccessible () {DateTimeUtils dateTimeUtils = nieuwe DateTimeUtils (); LOG.info ("Systeemtijd is:" + dateTimeUtils.getSystemTime ()); assertNotNull (dateTimeUtils.getSystemTime ()); }}

Hieronder staat de output van de logger:

[main] INFO c.b.n.DateTimeUtilsManualTest - Systeemtijd is: wo 19 december 11:34:02 2018

Zoals we kunnen zien, met behulp van de native trefwoord, hebben we met succes toegang tot een platformafhankelijke implementatie geschreven in een andere taal (in ons geval C ++).

5. Conclusie

In dit artikel hebben we de basisprincipes van native trefwoorden en methoden. Met een snel voorbeeld hebben we ook geleerd hoe we ze in Java kunnen integreren.

De codefragmenten die in dit artikel worden gebruikt, zijn beschikbaar via Github.