java如何用native
使用 JNI(Java Native Interface)调用本地方法
在 Java 中通过 JNI 调用本地(Native)方法,通常需要以下步骤:
编写 Java 类并声明 native 方法
创建一个 Java 类,声明 native 方法并使用 native 关键字。例如:
public class NativeExample {
// 声明 native 方法
public native void sayHello();
// 加载动态链接库
static {
System.loadLibrary("NativeExample");
}
public static void main(String[] args) {
new NativeExample().sayHello();
}
}
生成头文件
使用 javac 编译 Java 类,并通过 javah(Java 8 及以下)或 javac -h(Java 9 及以上)生成 C/C++ 头文件:
javac NativeExample.java
# Java 8 及以下
javah -jni NativeExample
# Java 9 及以上
javac -h . NativeExample.java
这会生成一个头文件(如 NativeExample.h),内容类似:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class NativeExample */
#ifndef _Included_NativeExample
#define _Included_NativeExample
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: NativeExample
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_NativeExample_sayHello(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
实现本地方法
编写 C/C++ 文件实现 native 方法。例如 NativeExample.c:
#include <stdio.h>
#include "NativeExample.h"
JNIEXPORT void JNICALL Java_NativeExample_sayHello(JNIEnv *env, jobject obj) {
printf("Hello from Native Code!\n");
}
编译本地代码为动态库
根据操作系统编译动态链接库:
-
Windows(生成
.dll文件):
gcc -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o NativeExample.dll NativeExample.c -
Linux/macOS(生成
.so或.dylib文件):gcc -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" -shared -o libNativeExample.so NativeExample.c
运行 Java 程序
确保动态库在 Java 的库路径中(通过 -Djava.library.path 指定),然后运行程序:
java -Djava.library.path=. NativeExample
输出应为:
Hello from Native Code!
注意事项
- 动态库名称需与
System.loadLibrary()中指定的名称一致(Windows 省略.dll,Linux/macOS 省略lib前缀和.so/.dylib后缀)。 - 跨平台时需为不同操作系统编译对应的动态库。
- 确保
JAVA_HOME环境变量正确配置,指向 JDK 安装路径。
通过以上步骤,可以实现 Java 调用本地代码的功能。






