当前位置:首页 > Java

java如何用native

2026-03-21 02:10:47Java

使用 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

输出应为:

java如何用native

Hello from Native Code!

注意事项

  • 动态库名称需与 System.loadLibrary() 中指定的名称一致(Windows 省略 .dll,Linux/macOS 省略 lib 前缀和 .so/.dylib 后缀)。
  • 跨平台时需为不同操作系统编译对应的动态库。
  • 确保 JAVA_HOME 环境变量正确配置,指向 JDK 安装路径。

通过以上步骤,可以实现 Java 调用本地代码的功能。

标签: 如何用java
分享给朋友:

相关文章

如何学习java

如何学习java

学习Java的步骤 理解基础知识 从Java的基本语法开始,包括变量、数据类型、运算符、控制流(if-else、循环)等。掌握这些基础概念是后续学习的基石。 学习面向对象编程(OOP) Java是一…

java如何学习

java如何学习

学习Java的有效方法 理解基础概念 Java是一门面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制语句(if-else、循环)是必要的。面向对象的核心概念包括类、对象、继承、多态和封装…

如何编译java

如何编译java

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证是否安装成功。若未安装,需从Oracl…

java如何产生随机数

java如何产生随机数

使用 Math.random() 方法 Math.random() 生成一个范围在 [0.0, 1.0) 的伪随机 double 值。通过缩放和偏移可以生成指定范围的随机数。 double ra…

java如何连接mysql

java如何连接mysql

连接 MySQL 数据库的基本步骤 添加 MySQL 驱动依赖 在项目中引入 MySQL 的 JDBC 驱动。如果使用 Maven,在 pom.xml 中添加以下依赖: <dependency…

如何升级java

如何升级java

检查当前Java版本 在升级之前,需确认当前安装的Java版本。在终端或命令提示符中运行以下命令: java -version 输出会显示当前Java版本(如1.8.0_301或17.0.2)。…