Einführung in das Schlüsselwort „native“:
Das Schlüsselwort „native“ fungiert als Bindeglied zwischen der JAVA-Sprache und einem Stück Code oder einer Bibliothek, die in einer anderen Sprache als JAVA geschrieben wurde, die möglicherweise von der Maschine abhängt, auf der Sie arbeiten. Wenn das native Schlüsselwort auf eine Methode angewendet wird, dann bedeutet das, dass die Methode mit nativem Code implementiert wird, der in einer anderen Sprache (wie C oder C++) über JNI (JAVA native interface) geschrieben wurde.
Syntax:
Die Syntax von nativem Code ist die gleiche wie die einer normalen Funktionsdefinition mit dem Schlüsselwort „native“ am Anfang der Funktion.
Zum Beispiel:
Public class testing
{public native String testMethod (String parameter);}
Hier ist public ein Zugriffsmodifikator. Sie sollte öffentlich sein, damit eine andere Datei sie verwenden kann. String ist der Rückgabedatentyp der Funktion. Er kann je nach Schlüsselwort Integer, Character oder Boolean sein. Der Parameter, der an diese Funktion übergeben wird, ist ebenfalls vom Datentyp String. Alles sollte unter Klasse gehalten werden.
Nach der Funktionsdeklaration rufen wir diese Funktion über das erstellte Objekt und die geladene Bibliothek auf.
public static void main(String args)
{
System.loadLibrary(„testing“);
testing testingnew = new testing();
String output = testingnew.stringMethod(„NATIVE“);
}
Die oben definierte Bibliothek sollte zuerst geladen werden und das n ihr Objekt erstellt werden. Mit Hilfe dieses Objekts wird die native Funktion aufgerufen.
Wie funktioniert das native Schlüsselwort?
Es sollten zwei Dateien vorhanden sein. Eine enthält JAVA-Code, die andere sollte C/C++ Legacy-Code enthalten. Der Java-Code wird zum Aufrufen des Legacy-Codes verwendet. Dieser Legacy-Code wird mit der Hardware interagieren und die erwartete Ausgabe zurückgeben.
Wenn der Legacy-Code mit der Hardware interagiert, wird er nicht den von JAVA festgelegten Richtlinien folgen. Dieser Code wird die gewünschte Verarbeitung durchführen, um die Ausgabe zu erhalten und die Ergebnisse an JNI weiterzugeben. Das Java Native Interface wird dann in seinem Verzeichnis, das alle Regeln für den nativen Code enthält, nachsehen (dies geschieht in der Datei javah.exe im SDK). JNI wurde als Teil des Java-Toolkits entwickelt. Nach dieser Verarbeitung wird JAVA die Ausgaben in der JAVA-Sprache selbst veröffentlichen. Wenn wir ein Programm in JAVA erstellen, müssen wir sicherstellen, dass es eine Variablen-/Datenflussverbindung zwischen der JAVA-Datei und der Legacy-Datei gibt, so dass es einen reibungslosen Datenfluss zwischen beiden gibt.
Die folgenden Schritte erklären, wie man native Schlüsselwörter verwendet:
- Schreiben Sie den JAVA-Code, der native Methoden und geladene Shared Librarys enthält, und speichern Sie ihn unter „Dateiname.JAVA“.
- Kompilieren Sie den JAVA-Code und konvertieren Sie ihn in Bytecode.
- Erstellen Sie eine C/C++-Header-Datei, die die Signatur der aufzurufenden nativen Funktion enthält.
- Schreiben Sie C/C++-Code, der die Implementierung der nativen Methode enthält.
- Starten Sie die ausführbare JAVA-Datei, um die Ergebnisse zu sehen.
Beispiele, um die Implementierung von nativen Schlüsselwörtern zu zeigen:
Wir sollten Code in Eclipse schreiben und den Code ausführen, um eine Bibliothek zu erstellen, mit der dann C-Code implementiert werden kann.
Code: package com.slackerOne;
public class JPP {
public static native void pAccess();
public static native int pRead();
public static native void pWrite(int port, int output);
static{
System.loadLibrary(„JPPlibs“);
}
public void jAccess(){
JPP.pAccess();
}
public int jRead(){
return JPP.pRead();
}
public void jWrite(int port, int output){
JPP.pWrite(port, output);
}
}
Nach dem Speichern dieses Codes in einer neuen „Klasse“ des Java-Projekts. Wir müssen die Laufzeitumgebung einrichten, um die Header-Datei zu generieren.
Wenn wir dies ausführen, sollten wir eine Bibliothek generiert bekommen.
Ausgabe:
Hier haben wir die Header-Datei aus dem Java-Code erstellt, die als Bindeglied zwischen dem nativen Code und der Java-Sprache dienen wird.
Vorteile:
- Es bietet einen zusätzlichen Vorteil für JAVA, um mit dem in anderen Sprachen geschriebenen Code zu interagieren und die Arbeit zu reduzieren, um den gleichen Code in JAVA geschrieben zu haben, wodurch die Code-Redundanz reduziert wird.
- Es verbessert die gesamte Code-Leistung. Da der in einer anderen Sprache geschriebene Code vielleicht schneller ist, wenn er mit der Maschinensprache im Vergleich zu JAVA arbeitet. Wir können dann ein JAVA-Programm verwenden, um diesen Code aufzurufen.
- Bei diesem Ansatz können wir direkt Systemaufrufe tätigen. Dadurch wird die Wahrscheinlichkeit externer Störungen verringert und die Geschwindigkeit der Codeausführung verbessert.
- Sie können eine vorgeladene Bibliothek (die in einer anderen Sprache als JAVA geschrieben ist) dynamisch aufrufen, indem Sie einen beliebigen, in JAVA geschriebenen Steuercode verwenden und trotzdem eine Antwort in JAVA erhalten.
- Dadurch wird es für JAVA möglich, auf Hardwareressourcen zuzugreifen, die nur von anderen Sprachen verwendet werden können.
- Für den Fall, dass Sie bereits einen plattformabhängigen Code für Ihre Anwendung erstellt haben und dessen Funktionen nicht von JAVA unterstützt werden, können wir in diesem Fall nativen Code haben und diesen nativen Code über das native Schlüsselwort mit JAVA verbinden.
Regeln:
- Das native Schlüsselwort muss vor dem Methodennamen verwendet werden.
- Die Deklaration einer nativen Methode hat keinen Körper und sollte mit einem Doppelpunkt enden, da diese Methoden nicht in JAVA definiert sind, sondern in der Sprache C/C++ vorhanden sind.
- Native Methoden können nicht als abstrakte Methode deklariert werden.
- Da nicht sicher ist, ob der bisherige alte Code nach dem IEEE 754-Standard (The IEEE Standard for Floating-Point Arithmetic ist ein technischer Standard für Gleitkommaarithmetik, der 1985 vom Institute of Electrical and Electronics Engineers eingeführt wurde) geschrieben wurde, können wir diese nativen Methoden nicht als strictftp deklarieren.
- Die Java Native Interface (JNI) Spezifikation wurde von JAVA entwickelt, um die Regeln und Deklarationen zur Implementierung nativer Methoden zu definieren, wie z.B. die Konvertierung von Datentypen zwischen Java und dem nativen Code.
Fazit:
Das native Schlüsselwort überbrückt die Kluft zwischen nativen Sprachen und JAVA. Dies kann als kritisches Bindeglied verwendet werden, wenn die Interaktion unserer Software mit der Hardware mehr darauf abzielt, einen effizienten Code unter Verwendung von bereits vorhandenem Code zu erhalten. Es macht die Implementierung Arbeit weniger im Vergleich zu der Entwicklung einer neuen Anwendung Code von Grund auf, wo es vermieden werden könnte.