Das Java Native-Schlüsselwort und die Methoden

1. Übersicht

In diesem kurzen Tutorial werden wir das Konzept des nativen Schlüsselworts in Java erläutern und zeigen, wie native Methoden in Java-Code integriert werden.

2. Das native Schlüsselwort in Java

Lassen Sie uns zunächst diskutieren, was ein natives Schlüsselwort in Java ist.

Einfach ausgedrückt ist dies ein Modifikator ohne Zugriff, der verwendet wird, um auf Methoden zuzugreifen, die in einer anderen Sprache als Java wie C / C ++ implementiert sind .

Es zeigt die plattformabhängige Implementierung einer Methode oder eines Codes an und fungiert auch als Schnittstelle zwischen JNI und anderen Programmiersprachen.

3. native Methoden

Eine native Methode ist eine Java-Methode (entweder eine Instanzmethode oder eine Klassenmethode), deren Implementierung auch in einer anderen Programmiersprache wie C / C ++ geschrieben ist.

Darüber hinaus kann eine als native gekennzeichnete Methode keinen Körper haben und sollte mit einem Semikolon enden:

[ public | protected | private] native [return_type] method ();

Wir können sie verwenden, um:

  • Implementieren Sie eine Schnittstelle mit Systemaufrufen oder Bibliotheken, die in anderen Programmiersprachen geschrieben sind
  • Zugriff auf System- oder Hardwareressourcen, die nur von der anderen Sprache aus erreichbar sind
  • Integrieren Sie bereits vorhandenen Legacy-Code, der in C / C ++ geschrieben wurde, in eine Java-Anwendung
  • Rufen Sie eine kompilierte dynamisch geladene Bibliothek mit beliebigem Code aus Java auf

4. Beispiele

Lassen Sie uns nun zeigen, wie diese Methoden in unseren Java-Code integriert werden.

4.1. Zugriff auf nativen Code in Java

Lassen Sie uns zunächst eine Klasse DateTimeUtils erstellen , die auf eine plattformabhängige native Methode namens getSystemTime zugreifen muss :

public class DateTimeUtils { public native String getSystemTime(); // ... }

Zum Laden verwenden wir die System.loadLibrary.

Lassen Sie uns den Aufruf zum Laden dieser Bibliothek in einen statischen Block setzen, damit sie in unserer Klasse verfügbar ist:

public class DateTimeUtils { public native String getSystemTime(); static { System.loadLibrary("nativedatetimeutils"); } }

Wir haben eine Dynamic-Link-Bibliothek namens nativedatetimeutils erstellt , die getSystemTime in C ++ mithilfe detaillierter Anweisungen implementiert, die in unserem Handbuch zum JNI-Artikel behandelt werden.

4.2. Testen nativer Methoden

Lassen Sie uns abschließend sehen, wie wir native Methoden testen können, die in der DateTimeUtils- Klasse definiert sind:

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()); } }

Unten ist die Ausgabe des Loggers:

[main] INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018

Wie wir sehen können, können wir mit Hilfe des nativen Schlüsselworts erfolgreich auf eine plattformabhängige Implementierung zugreifen, die in einer anderen Sprache (in unserem Fall C ++) geschrieben ist.

5. Schlussfolgerung

In diesem Artikel haben wir die Grundlagen nativer Schlüsselwörter und Methoden kennengelernt. Anhand eines kurzen Beispiels haben wir auch gelernt, wie man sie in Java integriert.

Die in diesem Artikel verwendeten Codefragmente sind über Github verfügbar.