对于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文件:
3. [创建DLL项目]在DevC++中,新建一个DLL动态链接库文件,文件的名称务必要和类文件加载的Libraries中的名称一样,此处为Test:
4.[修改Test文件目录]刚新建的文件中,会有两个后缀分别为.h和.cpp的文件,首先创建两个文件夹为Sources和Headers,分别用于存储.h头文件和.cpp源文件。同时将系统本省产生的.h文件和.cpp文件删除:
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文件夹下。
至此,我已经将所有需要的头文件进行了导入。接下来,将在Sources文件下编写.cpp源文件。
6. [编写.cpp文件]在Sources文件夹下添加.dllmain.cpp文件:
注意,导入的头文件都必须是绝对路径,编写.cpp文件时,主函数的格式需要和native_method_NativeMethod.h重定义的函数一样。
7. [编译]对dllmain.cpp文件进行编译,同时生成Test.dll文件:
8. [拷贝.dll]将Test.dll文件copy到Java工程目录下:
9. [运行.class]成功实现Native方法显示:
OK,到这里,我对于Native在新的领域有了新的认识,探索让技术更有趣~欢迎关注和闲聊~