La première fois que j'ai rencontré le natif est une méthode de code hashcode dans le code source java.lang.object:
public native int hashcode ();
Pourquoi y a-t-il un natif? C'est ce que je veux apprendre. Je veux donc résumer le natif ci-dessous.
1. Comprendre l'interface native native, c'est-à-dire JNI, Java
Toutes les langues espéraient être pures. Par exemple, si vous aimez résoudre une certaine solution, écrivez-le simplement dans cette langue. La plate-forme Java dispose d'une API pour les utilisateurs pour interopérer avec le code C local, appelé Java Native Interface (Java Local Interface).
2. Appelez C "Hello, Jni" en Java
Nous devons suivre les étapes qui sont pratiques pour sortir du travail:
1. Créez une classe Java qui contient une méthode native et une méthode de bibliothèque de chargement. Le code hellonatif.java est le suivant:
classe publique Hellonative {static {System.LoadLibrary ("Hellonative"); } public static natif void sayshello (); @SuppressWarnings ("STATIC-ACCESS") public static void main (String [] args) {new Hellonative (). SayHello (); }}La première chose à noter est la méthode native, et la bibliothèque de chargement fonctionne également plus tard. Le mot-clé natif indique au compilateur (en fait JVM) que la méthode est définie en externe, et ici fait référence à C. Si vous exécutez ce code directement, le JVM vous dira: "Une exception Java s'est produite." La sortie de la console est la suivante:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at HELLONATIVE. <Clinit> (Hellonative.java:5)
C'est à ce moment que le programme l'utilise, la machine virtuelle dit qu'elle ne sait pas comment trouver Sayhello. Vous pouvez l'écrire manuellement ci-dessous, il est donc naturel pour Mason d'utiliser
2. Exécutez Javah pour obtenir le fichier d'en-tête de déclaration C contenant la méthode.h
Mettez Hellonative.java, simplement Javac Javah, comme le montre la figure
J'ai le fichier hellonatif.h suivant:
/ * Ne modifiez pas ce fichier - il est généré à la machine * / # Inclure <jni.h> / * En-tête pour la classe Hellonative * / #ifndef _included_hellonative # define _included_hellonative # ifdef __cplusplusextern "c" {# endif / * * Class: Hellonative * Méthode: sayhello * Signature: () V * / JNIExport * VOIDE VOIDE: SIGNOLLO * Signature: () V * / JNIExport * Jnicall java_hellonative_sayhello (jNienv *, jclass); #ifdef __cplusplus} # endif # endifjni.h Ce fichier, dans /% java_home% inclut
3. Écrivez C pour implémenter des méthodes locales en fonction du fichier d'en-tête.
Ici, nous mettons simplement en œuvre cette méthode Sayhello comme suit:
#include "Hellonative.h" #include <stdio.h> jniexport void jnicall java_hellonative_sayhello {printf ("bonjour, jni"); }4. Générez la bibliothèque partagée DLL, puis chargez le programme Java et appelez-le.
Sur Windows, Mingw GCC fonctionne comme suit
gcc -m64 -wl, - add-stdcall-alias -i "c: / programme files / java / jdk1.7.0_71 / inclure" -i "c: / programme files / java / jdk1.7.0_71 / include / include / win32" -shared -o hellonative.dll hellonative.c
-M64 signifie que la bibliothèque DLL générée est 64 bits. Ensuite, exécutez Hellonatif:
Java Hellonative
Enfin, je peux voir que la console imprime comme suit:
Bonjour, Jni
3. JNI Call C Tableau de flux
4. Autres présentations
Le natif est utilisé lorsqu'il est co-développé avec C ++! Vous n'avez pas besoin de développer Java par vous-même!
Utilisez des mots clés natifs pour indiquer que cette méthode est une fonction native, c'est-à-dire que cette méthode est implémentée en langue C / C ++, et est compilée en DLL et appelée par Java.
Les organismes d'implémentation de ces fonctions ne sont pas inclus dans le code source de JDK, et vous ne devriez pas les voir. Ils sont également différents pour différentes plates-formes. Il s'agit également du mécanisme sous-jacent de Java. En fait, Java appelle différentes méthodes natives sur différentes plates-formes pour obtenir l'accès au système d'exploitation.
1. Native est utilisée pour collaborer avec d'autres langues (comme C ++), c'est-à-dire que la mise en œuvre des fonctions natives n'est pas écrite en Java.
2. Puisque aucun de Java, ne vous inquiétez pas pour son code source, haha
Native signifie notifier le système d'exploitation.
Vous devez implémenter cette fonction pour moi car je veux l'utiliser.
Par conséquent, les fonctions des mots clés natives sont implémentées par le système d'exploitation, et Java ne peut être appelé que.
Java est un langage multiplateforme. Comme il est multiplateforme, le prix payé est de sacrifier un certain contrôle sur la couche sous-jacente. Pour atteindre le contrôle de la couche sous-jacente, Java a besoin de l'aide d'autres langues. C'est le rôle de natif.
Java n'est pas parfait. En plus du fait qu'il est beaucoup plus lent que le C ++ traditionnel en termes de vitesse d'exécution, Java ne peut pas accéder directement au système d'exploitation sous-jacent (comme le matériel système, etc.). Pour cette raison, Java utilise des méthodes natives pour étendre les fonctions des programmes Java.
La méthode native peut être comparée à l'interface entre les programmes Java et les programmes C, et ses étapes de mise en œuvre sont:
1. Déclarer la méthode native () en Java puis compiler;
2. Utilisez Javah pour générer un fichier .h;
3. Écrivez un fichier .cpp pour implémenter la méthode d'exportation native, qui doit inclure le fichier .h généré dans la deuxième étape (notez qu'il contient également le fichier JNI.h avec JDK);
4. Compilez le fichier .cpp dans la troisième étape dans un fichier de bibliothèque de liens dynamiques;
5. Utilisez la méthode System.LoadLibrary () pour charger le fichier de bibliothèque de liens dynamiques généré à l'étape 4 en Java. Cette méthode native () est accessible en Java.
La situation où la méthode locale Java s'applique
1. Afin d'utiliser une fonctionnalité de la plate-forme hôte sous-jacente, cette fonctionnalité n'est pas accessible via l'API Java.
2. Afin d'accéder à un ancien système ou d'utiliser une bibliothèque existante, ce système ou bibliothèque n'est pas écrit en Java
3. Afin d'accélérer les performances du programme, une période de code sensible est implémentée en tant que méthode locale.
L'article ci-dessus comprend complètement le rôle des mots clés natifs dans Java est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.