A primeira vez que conheci é um método de hashcode no código -fonte java.lang.Object:
public nativo int hashcode ();
Por que existe um nativo? É isso que eu quero aprender. Então, eu quero resumir o nativo abaixo.
1. Entenda a interface nativa nativa, isto é, jni, java
Espera -se que todas as línguas sejam puras. Por exemplo, se você gosta de resolver uma determinada solução, apenas escreva nesse idioma. A plataforma Java possui uma API para os usuários interoperam com o código C local, chamado interface nativa de Java (interface local Java).
2. Ligue para C de "Hello, JNI" em Java
Precisamos seguir as etapas convenientes para sair do trabalho:
1. Crie uma classe Java que contém um método nativo e um método de biblioteca de carga da biblioteca de carga. Hellonative.Java Código é o seguinte:
classe pública Helonative {static {System.loadlibrary ("Helonative"); } public estático nativo void dizhello (); @Suppresswarnings ("access estático") public static void main (string [] args) {new Hellonative (). Sayhello (); }}A primeira coisa a observar é o método nativo, e a biblioteca de carregamento também funciona mais tarde. A palavra -chave nativa diz ao compilador (na verdade JVM) que o método é definido externamente e aqui se refere a C. Se você executar esse código diretamente, a JVM dirá: "ocorreu uma exceção de Java". A saída do console é a seguinte:
Exceção em thread "main" java.lang.unstisfiedlinkerror: não helonativo em java.library.path em java.lang.classloadler.loadlibrary (fonte desconhecida) em java.lang.Lang.Runtime.loadLibrary0 (fonte desconhecida) em java.lang.system.loadLibrary Helonativo. <Clinit> (Helonative.java:5)
É quando o programa o usa, a máquina virtual diz que não sabe como encontrar o Sayhello. Você pode escrevê -lo manualmente abaixo, por isso é natural que o pedreiro use
2. Execute javah para obter o arquivo de cabeçalho da declaração C contendo o método.h
Coloque -se helonativo.java, simplesmente javac javah, como mostrado na figura
Eu tenho o seguinte arquivo helonativo.h :
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloNative */ #ifndef _Included_HelloNative#define _Included_HelloNative#ifdef __cplusplusextern "C" {#endif/* * Class: HelloNative * Method: sayHello * Signature: ()V */JNIEXPORT void Jnicall java_hellonative_sayhello (jnienv *, jclass); #ifdef __cplusplus}#endif#endifjni.h este arquivo, em /%java_home%inclui
3. Escreva C para implementar métodos locais de acordo com o arquivo de cabeçalho.
Aqui simplesmente implementamos esse método Sayhello da seguinte maneira:
#include "helonative.h" #include <stdio.h> jniexport void jnicall java_hellonative_sayhello {printf ("hello, jni"); }4. Gere a biblioteca compartilhada da DLL, carregue o programa Java e ligue para ele.
No Windows, o Mingw GCC é o seguinte
gcc -m64 -wl, -add -stdcall -alias -i "c:/arquivos de programas/java/jdk1.7.0_71/incluir" -i "c:/arquivos de programas/java/jdk1.7.0_71/incluir/incluir/win32" -Shared -o Hellonative.dllonnative.ct.
-m64 significa que a biblioteca DLL gerada é de 64 bits. Então corra Helonative:
Java Hellonative
Finalmente, posso ver que o console impressa da seguinte forma:
Olá, jni
3. JNI Chamada de fluxograma C
4. Outras introduções
O nativo é usado quando co-desenvolvido com C ++! Você não precisa desenvolver Java sozinho!
Use palavras -chave nativas para indicar que esse método é uma função nativa, ou seja, esse método é implementado na linguagem C/C ++ e é compilado em DLL e chamado por Java.
Os órgãos de implementação dessas funções não estão incluídos no código -fonte do JDK, e você não deve vê -los. Eles também são diferentes para diferentes plataformas. Este também é o mecanismo subjacente de Java. De fato, o Java chama diferentes métodos nativos em diferentes plataformas para obter acesso ao sistema operacional.
1. O nativo é usado para colaborar com outros idiomas (como C ++), ou seja, a implementação de funções nativas não é escrita em Java.
2. Como nenhum Java, não se preocupe com seu código -fonte, haha
nativo significa notificar o sistema operacional.
Você precisa implementar essa função para mim, porque eu quero usá -la.
Portanto, as funções das palavras -chave nativas são implementadas pelo sistema operacional, e o Java só pode ser chamado.
Java é uma linguagem de plataforma cruzada. Como é uma plataforma cruzada, o preço pago é sacrificar algum controle sobre a camada subjacente. Para alcançar o controle sobre a camada subjacente, Java precisa de ajuda de outros idiomas. Este é o papel do nativo.
Java não é perfeito. Além do fato de ser muito mais lento que o C ++ tradicional em termos de velocidade de corrida, o Java não pode acessar diretamente o sistema operacional subjacente (como hardware do sistema, etc.). Por esse motivo, o Java usa métodos nativos para estender as funções dos programas Java.
O método nativo pode ser comparado à interface entre os programas Java e C, e suas etapas de implementação são:
1. Declare o método nativo () em Java e depois compile;
2. Use Javah para gerar um arquivo .h;
3. Escreva um arquivo .cpp para implementar o método de exportação nativo, que precisa incluir o arquivo .h gerado na segunda etapa (observe que ele também contém o arquivo jni.h com JDK);
4. Compile o arquivo .cpp na terceira etapa em um arquivo de biblioteca de link dinâmico;
5. Use o método System.LoadLibrary () para carregar o arquivo da biblioteca de link dinâmico gerado na Etapa 4 no Java. Este método nativo () pode ser acessado em Java.
A situação em que o método local de Java se aplica
1. Para usar um recurso da plataforma host subjacente, esse recurso não pode ser acessado através da API Java.
2. Para acessar um sistema antigo ou usar uma biblioteca existente, este sistema ou biblioteca não é escrito em java
3. Para acelerar o desempenho do programa, um período de código sensível é implementado como um método local.
O artigo acima entende de maneira abrangente o papel das palavras -chave nativas no Java é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.