请教Java中Native限定词的用法,希望给个合适的程序例子说明一下。一定给分,谢谢。

解决方案 »

  1.   

    native关键字指示该方法由本地代码实现,在Java程序中只需声明便可引用.
    -----------------------------例子开始-----------------------
    /*从Windows控制台中读取用户输入的用户名,打印欢迎信息*/
    //--------------------1.写Java源文件/*HelloWorld.java*/
    public class HelloWorld
    {
        static
        {
            System.loadLibrary("GetUserName");//加载实现本地方法的库,GetUserName是库名
                                           //(不带后缀),在Windows上就是GetUserName.dll
        }
        private String userName = null;
        private native String getUserNameFromConsole();//本地方法
        
        public static void main(String args[])
        {
             HelloWorld hello = new HelloWorld();
             userName = getUserNameFromConsole();//本地方法的调用形式与Java方法没有区别
             System.out.println("Hello " + userName + ", Welcome to Java World!");
        }
    }
    //---------------2.编译Java文件,生成HelloWorld.class
    javac HelloWorld.java//---------------3.用HelloWorld.class生成本地方法的头文件HelloWorld.h
    javah -jni HelloWorld
    HelloWorld.h中可以找到本地方法的函数原型
    JNIEXPORT jstring JNICALL
    Java_HelloWorld_print (JNIEnv *, jobject);//---------------4.在VC++6.0中创建HelloWorld.c实现本地方法
    //HelloWorld.c#include <jni.h>
    #include <stdio.h>
    #include "HelloWorld.h"
    JNIEXPORT jstring JNICALL
    Java_HelloWorld_print(JNIEnv *env, jobject obj)
    {
       printf("请输入用户名:");
       char buf[128];//假设用户名不超过127字符
       scanf("%s", buf);
       return (*env)->NewStringUTF(env, buf);
    }//--------------------5.编译连接HelloWorld.c,生成dll文件
    cl -Ic:\java\include -Ic:\java\include\win32
    -MD -LD HelloWorld.c -GetUserName.dll//-------------------6.运行Java程序,使用-Djava.library.path指示dll所在路径
    //这里假设与HelloWorld.class在相同目录下
    java -Djava.library.path=. HelloWorld
    //运行结果
    请输入用户名:James Gosling
    Hello James Gosling, Welcome to Java World!--------------------------------例子完毕------------------------------
    想学的话还是找本书看吧,<Java Native Interface>不错.
      

  2.   

    勘误------------------------------
        public static void main(String args[])
        {
             HelloWorld hello = new HelloWorld();
             hello.userName = hello.getUserNameFromConsole();//本地方法的调用形式与Java方法没有区别
             System.out.println("Hello " + hello.userName + ", Welcome to Java World!");
        }
      

  3.   

    勘误------方法名copy错了---------------------------
    //---------------3.用HelloWorld.class生成本地方法的头文件HelloWorld.h
    javah -jni HelloWorld
    HelloWorld.h中可以找到本地方法的函数原型
    JNIEXPORT jstring JNICALL
    Java_HelloWorld_getUserNameFromConsole (JNIEnv *, jobject);//---------------4.在VC++6.0中创建HelloWorld.c实现本地方法
    //HelloWorld.c#include <jni.h>
    #include <stdio.h>
    #include "HelloWorld.h"
    JNIEXPORT jstring JNICALL
    Java_HelloWorld_getUserNameFromConsole(JNIEnv *env, jobject obj)
    {
       printf("请输入用户名:");
       char buf[128];//假设用户名不超过127字符
       scanf("%s", buf);
       return (*env)->NewStringUTF(env, buf);
    }
      

  4.   

    Native是指本地方法  比如JAVA调用C 调用C++的API等  即JNI JAVA NATIVE INTERFACE
    举个非常简单的例子
    class HelloNative
    {  
       public static native void greeting();//这就是一个NATIVE方法 是不是看起来和抽象方法一样?呵呵 ~~如果不调用他的话编译是能通过的
      
       static
       {  
          System.loadLibrary("HelloNative");
       }
    }class HelloNativeTest
    {  
       public static void main(String[] args)
       {  
          HelloNative.greeting();
       }
    }
      

  5.   

    各位辛苦了,都给分。非常感谢asp3344()和lixiaoxue85(蛮野蛮)。两位100分,其他人也有分。
      

  6.   

    详情参看JNI,至于说JNI不能跨平台,就要看跨平台要怎么解释了。