Das erste Mal, dass ich native traf, ist eine Hashcode -Methode im Quellcode java.lang.object:
public native int hashcode ();
Warum gibt es einen Eingeborenen? Das möchte ich lernen. Also möchte ich den Eingeborenen unten zusammenfassen.
1. Verstehe Native, das heißt, JNI, Java Native Interface
Alle Sprachen sind hoffentlich rein. Wenn Sie beispielsweise eine bestimmte Lösung lösen möchten, schreiben Sie sie einfach in diese Sprache. Die Java -Plattform verfügt über eine API, für die Benutzer mit dem lokalen C -Code, dem Java Native Interface (Java Local Interface), zusammenarbeiten können.
2. Rufen Sie C's "Hallo, Jni" in Java an
Wir müssen die Schritte ausführen, die bequem sind, um von der Arbeit zu gehen:
1. Erstellen Sie eine Java -Klasse , die eine native Methode und eine Lastmethode der Lastbibliothek enthält. Hellonative.java Code ist wie folgt:
public class hellonative {static {System.loadlibrary ("hellonative"); } public statische native void Sayshello (); @SuppressWarnings ("static-access") public static void main (String [] args) {new Hellonative (). Sayhello (); }}Das erste, was zu beachten ist, ist die native Methode, und die Ladebibliothek funktioniert auch später. Das native Schlüsselwort teilt dem Compiler (eigentlich JVM) mit, dass die Methode extern definiert ist, und bezieht sich hier auf C. Wenn Sie diesen Code direkt ausführen, sagt der JVM Ihnen: "Eine Java -Ausnahme ist aufgetreten." Die Konsolenausgabe ist wie folgt:
Ausnahme in Thread "Haupt" java.lang.unsatisfiedLinKError: Keine hellonativen in java.library.path bei java.lang.classloader.loadlibrary (unbekannte Quelle) bei java.lang.runtime.loadlibrary0 (Unbekannte Quelle) bei Java.lang.System.Loadlibrary (Unbekannt Hellonative. <clinit> (hellonative.java:5)
Dies ist, wenn das Programm es verwendet, sagt die virtuelle Maschine, dass es nicht weiß, wie man Sayhello findet. Sie können es manuell unten schreiben, daher ist es für Mason selbstverständlich
2. Führen Sie Javah aus, um die C -Deklarations -Header -Datei mit der Methode zu erhalten.
Put hellonative.java, einfach Javac Javah, wie in der Figur gezeigt
Ich habe die folgende hellonative.h -Datei erhalten:
/ * Bearbeiten Sie diese Datei nicht - es ist eine Maschine generiert */#include <Jni.h>/ * Header für die Klasse Hellonative */#Ifndef _included_hellonative#Define _included_hellonative#ifdef __cplusextern "c" {{#endif/ * class: Jnicall java_hellonative_sayhello (jnienv *, jclass); #ifdef __cplusplus}#endif#endifjni.h diese Datei in /%java_home%inklusive
3. Schreiben Sie C, um lokale Methoden gemäß der Header -Datei zu implementieren.
Hier implementieren wir einfach diese Sayhello -Methode wie folgt:
#include "hellonative.h" #include <stdio.h> jniexport void jnicall java_hellonative_sayhello {printf ("Hallo, jni"); }4. Generieren Sie die DLL Shared Library, laden Sie das Java -Programm und rufen Sie sie an.
Unter Windows läuft Mingw GCC wie folgt
gcc -m64 -wl, -add -stdcall -alias -i "c:/Programmdateien/Java/Jdk1.7.0_71/include" -i "c:/Programmdateien/java/jdk1.7.0_71/include/win32" -Shared -o Hellonative
-M64 bedeutet, dass die generierte DLL-Bibliothek 64-Bit ist. Dann rennen Sie hellonativ:
Java Hellonative
Schließlich kann ich sehen, dass die Konsole wie folgt druckt:
Hallo, jni
3. JNI CALL C FLOSE -Diagramm
4. Andere Einführungen
Native wird verwendet, wenn es mit C ++ zusammengearbeitet wird! Sie müssen Java nicht selbst entwickeln!
Verwenden Sie native Schlüsselwörter, um anzuzeigen, dass diese Methode eine native Funktion ist. Diese Methode wird in C/C ++ - Sprache implementiert und in DLL zusammengestellt und von Java aufgerufen.
Die Implementierungsstellen dieser Funktionen sind nicht im Quellcode von JDK enthalten, und Sie sollten sie nicht sehen. Sie unterscheiden sich auch für verschiedene Plattformen. Dies ist auch der zugrunde liegende Mechanismus von Java. Tatsächlich ruft Java verschiedene native Methoden auf verschiedenen Plattformen auf, um Zugriff auf das Betriebssystem zu erhalten.
1. Native wird verwendet, um mit anderen Sprachen (z. B. C ++) zusammenzuarbeiten, dh die Implementierung der nativen Funktionen ist nicht in Java geschrieben.
2. Seit keiner von Java mach dir keine Sorgen um seinen Quellcode, haha
Native bedeutet, das Betriebssystem zu benachrichtigen.
Sie müssen diese Funktion für mich implementieren, weil ich sie verwenden möchte.
Daher werden die Funktionen native Schlüsselwörter vom Betriebssystem implementiert, und Java kann nur aufgerufen werden.
Java ist eine plattformübergreifende Sprache. Da es plattformübergreifend ist, besteht der gezahlte Preis darin, eine gewisse Kontrolle über die zugrunde liegende Schicht zu opfern. Um die Kontrolle über die zugrunde liegende Ebene zu erreichen, braucht Java Hilfe von anderen Sprachen. Dies ist die Rolle des Eingeborenen.
Java ist nicht perfekt. Zusätzlich zu der Tatsache, dass es in Bezug auf die Laufgeschwindigkeit viel langsamer als herkömmliche C ++ ist, kann Java nicht direkt auf das zugrunde liegende Betriebssystem (wie Systemhardware usw.) zugreifen. Aus diesem Grund verwendet Java native Methoden, um die Funktionen von Java -Programmen zu erweitern.
Die native Methode kann mit der Schnittstelle zwischen Java -Programmen und C -Programmen verglichen werden, und ihre Implementierungsschritte sind:
1. deklarieren Sie die native () -Methode in Java und kompilieren Sie sie dann;
2. Verwenden Sie Javah, um eine .H -Datei zu generieren;
3. Schreiben Sie eine .cpp -Datei, um die native Exportmethode zu implementieren, die die im zweite Schritt generierte .h -Datei enthalten muss (beachten Sie, dass sie auch die JNI.H -Datei mit JDK enthält).
4. kompilieren Sie die .cpp -Datei im dritten Schritt in eine dynamische Link -Bibliotheksdatei.
5. Verwenden Sie die Methode des Systems. Diese native () -Methode kann in Java zugegriffen werden.
Die Situation, in der die lokale Java -Methode gilt
1. Um eine Funktion der zugrunde liegenden Hostplattform zu verwenden, kann diese Funktion nicht über die Java -API zugegriffen werden.
2. Um auf ein altes System zuzugreifen oder eine vorhandene Bibliothek zu verwenden, ist dieses System oder diese Bibliothek nicht in Java geschrieben
3. Um die Leistung des Programms zu beschleunigen, wird eine Zeit des sensiblen Code als lokale Methode implementiert.
Der obige Artikel versteht umfassend, dass die Rolle der nativen Schlüsselwörter in Java der Inhalt ist, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.