La primera vez que me reuní con Native es un método hashcode en el código fuente java.lang.object:
público nativo int hashcode ();
¿Por qué hay un nativo? Esto es lo que quiero aprender. Así que quiero resumir el nativo a continuación.
1. Comprenda el nativo, es decir, JNI, Java Native Interface
Se espera que todos los idiomas sean puros. Por ejemplo, si desea resolver una determinada solución, simplemente escríbala en este idioma. La plataforma Java tiene una API para que los usuarios interoperan con el código C local, llamado Java Native Interface (Java Local Interface).
2. Llame a "Hello, Jni" de C en Java
Necesitamos seguir los pasos que son convenientes para salir del trabajo:
1. Cree una clase Java que contenga un método nativo y un método de carga de carga de la biblioteca de carga. Hellonative.java Code es el siguiente:
clase pública Hellonative {static {System.LoadLibrary ("Hellonative"); } público estático nativo void sayshello (); @SupplesWarnings ("Static-Access") public static void main (string [] args) {new Hellonative (). Sayhello (); }}Lo primero que debe tener en cuenta es el método nativo, y la biblioteca de carga también funciona más tarde. La palabra clave nativa le dice al compilador (en realidad JVM) que el método se define externamente, y aquí se refiere a C. Si ejecuta este código directamente, el JVM le dirá: "Se ha producido una excepción de Java". La salida de la consola es la siguiente:
Excepción en el hilo "Main" java.lang.unseptisfiedlinkError: no he Hellonative en java.library.path en java.lang.classloader.loadlibrary (fuente desconocida) en java.lang.runtime.loadlibrary0 (fuente desconocida) en java.lang.system.loadlibrary (fuente desconocida) en Hellonative. <Clinit> (Hellonative.Java:5)
Esto es cuando el programa lo usa, la máquina virtual dice que no sabe cómo encontrar Sayhello. Puedes escribirlo manualmente a continuación, por lo que es natural que Mason use
2. Ejecute Javah para obtener el archivo de encabezado de declaración de C que contiene el método.h
Pon Hellonative.java, simplemente Javac Javah, como se muestra en la figura
Obtuve el siguiente archivo hellonative.h :
/ * No edite este archivo: se genera la máquina */#include <jni.h>/ * encabezado para clases Hellonative */#ifndef _included_hellonative#Define _included_hellonative#ifdef __cplususExtern "c" {#endif/ * * class: Hellonative * Method: Sayhello * Signature: () Jnie Jnicall java_hellonative_sayhello (jnienv *, jclass); #ifdef __cplusplus}#endif#endifjni.h este archivo, in /%java_home%incluye
3. Escriba C para implementar métodos locales de acuerdo con el archivo de encabezado.
Aquí simplemente implementamos este método Sayhello de la siguiente manera:
#include "hellonative.h" #include <stdio.h> jniexport void jnicall java_hellonative_sayhello {printf ("hola, jni"); }4. Genere la biblioteca compartida DLL, luego cargue el programa Java y llámelo.
En Windows, Mingw GCC se ejecuta de la siguiente manera
gcc -m64 -wl, -add -stdcall -alias -i "c:/archivos de programa/java/jdk1.7.0_71/include" -i "c:/programas/java/jdk1.7.0_71/include/include/win32" -shared -o hellonative.dll hellonative.c.c.c
-M64 significa que la biblioteca DLL generada es de 64 bits. Luego corre hellonative:
Java Helonative
Finalmente, puedo ver que la consola se imprime de la siguiente manera:
Hola jni
3. JNI Call c diagrama de flujo
4. Otras presentaciones
¡El nativo se usa cuando se desarrolla conjuntamente con C ++! ¡No necesitas desarrollar Java solo!
Use palabras clave nativas para indicar que este método es una función nativa, es decir, este método se implementa en el lenguaje C/C ++, y se compila en DLL y se llama Java.
Los cuerpos de implementación de estas funciones no están incluidos en el código fuente de JDK, y no debe verlos. También son diferentes para diferentes plataformas. Este es también el mecanismo subyacente de Java. De hecho, Java llama a diferentes métodos nativos en diferentes plataformas para lograr el acceso al sistema operativo.
1. Nativo se usa para colaborar con otros idiomas (como C ++), es decir, la implementación de funciones nativas no está escrita en Java.
2. Dado que ninguno de Java, no se preocupe por su código fuente, jaja
nativo significa notificar al sistema operativo.
Tienes que implementar esta función para mí porque quiero usarla.
Por lo tanto, el sistema operativo implementa las funciones de las palabras clave nativas, y Java solo puede llamarse.
Java es un lenguaje multiplataforma. Dado que es multiplataforma, el precio pagado es sacrificar cierto control sobre la capa subyacente. Para lograr el control sobre la capa subyacente, Java necesita ayuda de otros idiomas. Este es el papel de nativo.
Java no es perfecto. Además del hecho de que es mucho más lento que el C ++ tradicional en términos de velocidad de ejecución, Java no puede acceder directamente al sistema operativo subyacente (como el hardware del sistema, etc.). Por esta razón, Java utiliza métodos nativos para extender las funciones de los programas Java.
El método nativo se puede comparar con la interfaz entre los programas Java y los programas C, y sus pasos de implementación son:
1. Declarar el método nativo () en Java y luego compilar;
2. Use Javah para generar un archivo .h;
3. Escriba un archivo .cpp para implementar el método de exportación nativo, que debe incluir el archivo .h generado en el segundo paso (tenga en cuenta que también contiene el archivo jni.h con jdk);
4. Compile el archivo .cpp en el tercer paso en un archivo de biblioteca de enlaces dinámicos;
5. Use el método System.LoadLibrary () para cargar el archivo de biblioteca de enlaces dinámicos generado en el paso 4 en Java. Se puede acceder a este método nativo () en Java.
La situación en la que se aplica el método local de Java
1. Para usar una característica de la plataforma de host subyacente, no se puede acceder a esta característica a través de la API Java.
2. Para acceder a un sistema antiguo o usar una biblioteca existente, este sistema o biblioteca no está escrito en Java
3. Para acelerar el rendimiento del programa, se implementa un período de código sensible como un método local.
El artículo anterior comprende de manera integral que el papel de las palabras clave nativas en Java es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.