Übersicht
In diesem kurzen Tutorial werden wir das Konzept des nativen Schlüsselwortes in Java diskutieren, und wir werden auch zeigen, wie native Methoden in Java-Code zu integrieren.
Das native Schlüsselwort in Java
Lassen Sie uns zunächst besprechen, 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.
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 Methode gekennzeichnete Methode keinen Hauptteil haben und sollte mit einem Semikolon enden:
native method ();
Wir können sie verwenden, um:
- Implementieren einer Schnittstelle mit Systemaufrufen oder Bibliotheken, die in anderen Programmiersprachen geschrieben wurden
- Greifen Sie auf System- oder Hardwareressourcen zu, die nur von der anderen Sprache aus erreichbar sind
- Integrieren Sie bereits vorhandenen in C / C ++ geschriebenen Legacy-Code in eine Java-Anwendung
- Rufen Sie eine kompilierte dynamisch geladene Bibliothek mit beliebigem Code aus Java auf
Beispiele
Lassen Sie uns nun demonstrieren, wie Sie diese Methoden in unseren Java-Code integrieren können.
4.1. Zugriff auf nativen Code in Java
Erstellen wir zunächst eine Klasse DateTimeUtils , die auf eine plattformabhängige native Methode namens getSystemTime zugreifen muss:
public class DateTimeUtils { public native String getSystemTime(); // ...}
Zum Laden verwenden wir das System.LoadLibrary.
Platzieren wir den Aufruf, um diese Bibliothek in einen statischen Block zu laden, 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, nativedatetimeutils , erstellt, die getSystemTime in C ++ mithilfe detaillierter Anweisungen implementiert, die in unserem Artikel „Guide to JNI“ behandelt werden.
4.2. Testen nativer Methoden
Schließlich wollen wir 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:
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 native-Schlüsselworts erfolgreich auf eine plattformabhängige Implementierung zugreifen, die in einer anderen in unserem Fall C++).
Fazit
In diesem Artikel haben wir die Grundlagen von nativen Schlüsselwörtern und Methoden gelernt. Mit einem kurzen Beispiel haben wir auch gelernt, wie man sie in Java integriert.
Die in diesem Artikel verwendeten Code-Snippets sind über Github verfügbar.
Beginnen Sie mit Spring 5 und Spring Boot 2 über den Learn Spring-Kurs:
>> SCHAUEN SIE SICH DEN KURS AN