我的漫漫程序之旅

          專注于JavaWeb開發
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數據加載中……

          Java中Native關鍵字的作用

          Java不是完美的,Java的不足除了體現在運行速度上要比傳統的C++慢許多之外,Java無法直接訪問到操作系統底層(如系統硬件等),為此Java使用native方法來擴展Java程序的功能。
            可以將native方法比作Java程序同C程序的接口,其實現步驟:
            1、在Java中聲明native()方法,然后編譯;
            2、用javah產生一個.h文件;
            3、寫一個.cpp文件實現native導出方法,其中需要包含第二步產生的.h文件(注意其中又包含了JDK帶的jni.h文件);
            4、將第三步的.cpp文件編譯成動態鏈接庫文件;
            5、在Java中用System.loadLibrary()方法加載第四步產生的動態鏈接庫文件,這個native()方法就可以在Java中被訪問了。


          JAVA本地方法適用的情況
          1.為了使用底層的主機平臺的某個特性,而這個特性不能通過JAVA API訪問

          2.為了訪問一個老的系統或者使用一個已有的庫,而這個系統或這個庫不是用JAVA編寫的

          3.為了加快程序的性能,而將一段時間敏感的代碼作為本地方法實現。


          首先寫好JAVA文件

           /*
            * Created on 2008-5-19 Author zdw
            
          */

           
          package com.hode.hodeframework.modelupdate;

           
          public class CheckFile
           
          {
               
          public native void displayHelloWorld();

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


               
          public static void main(String[] args) {
                  
          new CheckFile().displayHelloWorld(); 
               }

           }



           

          然后根據寫好的文件編譯成CLASS文件
          然后在classes或bin之類的class根目錄下執行javah -jni com.hode.hodeframework.modelupdate.CheckFile,
           就會在根目錄下得到一個com_hode_hodeframework_modelupdate_CheckFile.h的文件
          然后根據頭文件的內容編寫

          com_hode_hodeframework_modelupdate_CheckFile.c文件
           #include 
          "CheckFile.h"
           #include 
           #include 

           JNIEXPORT 
          void JNICALL Java_com_hode_hodeframework_modelupdate_CheckFile_displayHelloWorld(JNIEnv *env, jobject obj)
           
          {
               printf(
          "Hello world!\n");
               
          return;
           }



          之后編譯生成DLL文件如“test.dll”,名稱與System.loadLibrary("test")中的名稱一致
           vc的編譯方法:cl -I%java_home%\include -I%java_home%\include\win32 -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll
          最后在運行時加參數-Djava.library.path=[dll存放的路徑]



          posted on 2008-05-26 09:18 々上善若水々 閱讀(1062) 評論(1)  編輯  收藏 所屬分類: J2SE

          評論

          # re: Java中Native關鍵字的作用   回復  更多評論   

          非常感謝分享!您的文字讓我受益很多!
          祝工作順利.....!
          2008-09-21 20:40 | itvivi
          主站蜘蛛池模板: 琼中| 台州市| 永兴县| 建水县| 基隆市| 桐梓县| 太谷县| 德令哈市| 田林县| 苗栗县| 吴江市| 巴中市| 明星| 凌源市| 平塘县| 荃湾区| 黎城县| 泌阳县| 天镇县| 泗阳县| 缙云县| 侯马市| 长阳| 兰州市| 金堂县| 阆中市| 闽侯县| 吕梁市| 舟曲县| 德阳市| 平度市| 吉林省| 颍上县| 三原县| 临湘市| 巴林左旗| 通海县| 长汀县| 沅江市| 犍为县| 剑阁县|