Java中的Native方法实现(C++)

 

        对于Java内存机制是一个耳熟能详的内容,对于具体的代码实现和操作却很少提及到。对于理论的学习,个人认为还是需要能够在实际中进行操作才可以发现问题,有新的突破,给技术发展带来新的冲击。闲话少说,对于Java内存的Native方法的使用进行具体的介绍。

        平台使用:DevC++软件version5.11,IDEAJ2018.3,Windows10系统下命令操作符

具体需要使用上述软件,各自的下载就不细说了。

 1. [编写类文件]在IDEA中,编写本地的方法类文件,代码如下:

package native_method;


public class NativeMethod {  //类型可以自己任意取
    public native void h(String name);   // 声明为本地方法,其中这个方法不可以用abstract 来修饰。

    static {
        System.loadLibrary("Test");    // 导入动态链接库,就是导入Test.dll 文件
    }

    public static void main(String[] args) {
        new NativeMethod().h("This is a NativeMethoddemo!");
    }
}

 2.  [生成.h文件]在Windows命令操作符中,进入到类的文件中,使用java -h . NativeMethod.java,产生java文件对应的.h文件:

NativeMethod.class

3. [创建DLL项目]在DevC++中,新建一个DLL动态链接库文件,文件的名称务必要和类文件加载的Libraries中的名称一样,此处为Test:

Java中的Native方法实现(C++)_第1张图片 创建DLL文件

4.[修改Test文件目录]刚新建的文件中,会有两个后缀分别为.h和.cpp的文件,首先创建两个文件夹为Sources和Headers,分别用于存储.h头文件和.cpp源文件。同时将系统本省产生的.h文件和.cpp文件删除:

Java中的Native方法实现(C++)_第2张图片 DLL文件目录

5. [添加.h和.cpp]在Headers目录下,右键添加,在文件目录下找到native_method_NativeMethod.h文件。同时在native_method_NativeMethod.h中,有头文件jni.h,将jni.h文件改为其绝对路径。打开jni.h文件,将对应的头文件jni_md.h引入到Headers中,并且将路径改为jni_md.h的绝对路径。如图:

提示:jni.h文件在Java安装路径的include文件下。jni_md.h在Java安装路径的include文件中的Win32文件夹下。

Java中的Native方法实现(C++)_第3张图片 native_method_NativeMethod.h Java中的Native方法实现(C++)_第4张图片 jni.h

      至此,我已经将所有需要的头文件进行了导入。接下来,将在Sources文件下编写.cpp源文件。

6. [编写.cpp文件]在Sources文件夹下添加.dllmain.cpp文件:

Java中的Native方法实现(C++)_第5张图片

注意,导入的头文件都必须是绝对路径,编写.cpp文件时,主函数的格式需要和native_method_NativeMethod.h重定义的函数一样。

7. [编译]对dllmain.cpp文件进行编译,同时生成Test.dll文件:

Java中的Native方法实现(C++)_第6张图片

8. [拷贝.dll]将Test.dll文件copy到Java工程目录下:

Java中的Native方法实现(C++)_第7张图片

9. [运行.class]成功实现Native方法显示:

Java中的Native方法实现(C++)_第8张图片

OK,到这里,我对于Native在新的领域有了新的认识,探索让技术更有趣~欢迎关注和闲聊~

你可能感兴趣的:(深入理解Java虚拟机)