大家好,我是程序员阿药。今天和大家分享的是如何实现一个Java本地方法。
所谓Java本地方法,其实就是用native关键字修饰的方法,在JDK源码中也比较常见。
本地方法就像是一个接口一样,只需要声明而不需要具体实现。它的实现是交由本地语言来实现的,本地语言我个人理解就是可以直接与操作系统交互的语言。
下面我将使用C++实现一个Java的本地方法,实现之前先说一下什么是JNI。
JNI,Java Native Interface,它是Java的SDK一部分,JNI允许Java代码使用以其他语言编写的代码和代码库,本地程序中的函数也可以调用Java层的函数,即JNI实现了Java和本地代码间的双向交互。
也就是说,Java本地方法的实现是通过JNI调用C++的代码。
实现步骤
1. 创建一个Java类,写一个本地方法,通过静态代码块加载需要的.dll文件(Windows环境),如果是Linux环境需要加载的是.so文件,除了使用加载的方式外也可以使用配置环境变量的方式,这里选择前者。需要的.dll文件是后面通过C++代码生成的。
2. 找到TestNativeMethod的CLASSPATH下,通过cmd进入。执行命令:"javah -jni com.study.nativeMethod.TestNativeMethod"。执行后在CLASSPATH下会生成一个.h文件。
3. 用Visual Studio创建一个名为Result的DLL工程。
4. 将.h文件复制到工程文件目录Result的下面。
5. 在Result工程中右击头文件>添加>现有项,将.h文件导入。修改.h文件中的#include <jni.h>为#include "jni.h"。
6. 把%JAVA_HOME%/include目录下的"jni.h"和win32目录下的"jni_md.h"两个文件复制到Result目录下面。JAVA_HOME就是JDK安装目录,不知道的可以通过cmd进入命令行,然后输入echo %JAVA_HOME查看。
7. 在Result工程中右击头文件>添加>现有项,将jni.h文件和jni_md.h文件导入。右击源文件>添加>新建项,创建一个source.cpp文件。
8. 在source.cpp中引入生成的.h文件,实现.h文件中的头函数。此处的实现其实就是Java本地方法的具体实现。
9. 右击项目>生成,就可以生成.dll文件了。将.dll文件复制到静态代码块中指定的目录下即可。
10. 执行Java的main方法,调用所写的本地方法即可看到控制台输出:"Success!"。