Javaのnativeキーワード

2921 ワード

nativeキーワードは、その修飾方法が、現在のファイルではなく、CやC++などの他の言語で実装されたファイルで対応する実装の元の生態法であることを示している.Java言語自体はオペレーティングシステムの最下位レベルへのアクセスと操作はできませんが、JNIインタフェースで他の言語を呼び出すことで最下位レベルへのアクセスを実現できます.
JNI Java    (Java Native Interface),         ,  Java       (Java Software Development Kit,SDK)    。JNI  Java                  。Invocation API(JNI    )     Java   (JVM)          ,                Java  。

  , Java                , applet          。          Java        100% Java  。  ,          ,        :

1.ローカルメソッドをすべて1つのクラスにカプセル化します.このクラスは単一のDLLを呼び出します.各ターゲット・オペレーティング・システム・プラットフォームについて、適切なプラットフォーム固有のバージョンのDLLを使用できます.これにより、ローカルコードの影響を最小限に抑えることができ、今後必要な移植問題を考慮するのに役立ちます.
2.ローカルメソッドはできるだけ簡単です.Microsoftを含むサードパーティの実行時のDLLへのローカルメソッドの依存度を最小限に抑えます.ローカルメソッドをできるだけ独立させて、DLLとアプリケーションのロードに必要なコストを最小限に抑えることができます.ランタイムDLLが必要な場合は、アプリケーションとともに提供する必要があります.
JNI       :

a.    native      Java 

b.  javac       Java 

c.  java -jni ****       .h    

d.      (C、C++)      

e.                 

      Java     C        :

a.  HelloWorld.java 
    class HelloWorld{

        public native void hello();

        static{
             System.loadLibrary("hello");
          }

        public static void main(String[] args){

            new HelloWorld().hello();
         }

    }
b.  
java HelloWorld.java
c.  .h  
    javah -jni HelloWorld
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include 
    /* Header for class HelloWorld */

    #ifndef _Included_HelloWorld
    #define _Included_HelloWorld
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     HelloWorld
     * Method:    hello
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_HelloWorld_hello
      (JNIEnv *, jobject);

    #ifdef __cplusplus
    }
    #endif
    #endif
        JNI      JNI Environment  。          Java       Java  HelloWorld     。            

d.c  
    #include 
    #include "HelloWorld.h"
    #include 
    JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){
       printf("Hello World!
"); return; }
  ,     jni.h    ( %JAVA_HOME%\include   ),   JNIEnv jobject   。

e.  c  

    Windows   ,    dll  。   HelloWorldImpl.c     ,  VC    cl 。
cl -I%java_home%\include -I%java_home%\include\win32 -LD HelloWorldImp.c -Fehello.dll注意:生成されたdllファイル名はオプション-Feの後に配置されます.ここではhelloです.HelloWorld.javaファイルで私たちがloadLibaryを使用するときに使用する名前はhelloです.もちろんここを修正してからそこも修正する必要があります.-I%java_home%\include -I%java_home%includewin 32パラメータに加え、ステップ4でローカルメソッドを記述する際にjni.hファイルが導入されたためです.6)プログラムjava HelloWorldを実行すればOK!