详解Java中native关键字:JNI调用C/C++完整流程

Jasper
Jasper
发布时间:2026-10-13| 5人浏览过
原创

Java中的native关键字用于声明本地方法,其实现由非Java语言(通常是C或C++)提供。该机制基于JNI(Java Native Interface),使Java程序能访问操作系统底层资源。本文将阐述其原理并演示完整的开发流程。

什么是Native Method

Native Method是指由Java调用非Java代码实现的接口。一个典型的例子是java.lang.Object类中的部分方法:

public final native Class<?> getClass();
public native int hashCode();
protected native Object clone() throws CloneNotSupportedException;

这些方法的实现体不在Java文件中,而是以C/C++等形式在其他地方实现。native修饰符可以与除abstract以外的所有Java标识符连用,因为native暗示方法有实现体(尽管不在当前文件),而abstract表示无实现体。final标识的本地方法继承后不能重写。

JNI与使用原则

JNI(Java Native Interface)允许Java代码使用其他语言编写的代码和代码库。调用外部代码时需注意:

  1. 封装性:将所有本地方法封装到一个类中,针对每种目标平台提供特定的DLL/so版本。
  2. 独立性:尽量减少第三方运行时依赖,若需提供DLL,必须随应用程序一起分发。
  3. 兼容性:过度使用JNI会降低应用的可移植性,且在Applet等环境中可能引发安全异常。

开发步骤详解

以下通过一个简单的HelloWorld示例,展示Java调用C程序的五个关键步骤。

第1步:编写带有native声明的Java类

创建一个类,声明native方法并使用System.loadLibrary加载库。

class HelloWorld {
    public native void hello();

    static {
        System.loadLibrary("hello");
    }

    public static void main(String[] args) {
        new HelloWorld().hello();
    }
}

第2步:编译Java类

使用javac命令编译源代码:

javac HelloWorld.java

第3步:生成C头文件

使用javah -jni生成供C/C++调用的头文件(假设JDK为旧版结构,新版JDK可能需要使用javac -h或直接查看生成的.class对应的符号):

javah -jni HelloWorld

生成的头文件HelloWorld.h内容如下:

#include <jni.h>
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *, jobject);

其中JNIEnv *为JNI环境指针,jobject为Java对象句柄。

第4步:使用C语言实现本地方法

创建实现文件HelloWorldImpl.c,包含必要的头文件并实现函数:

#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env, jobject obj) {
    printf("Hello World!\n");
    return;
}

第5步:编译动态链接库

在Windows环境下,使用Visual C++编译器将C代码编译为DLL:

cl -I%java_home%\include -I%java_home%\include\win32 -LD HelloWorldImp.c -Fehello.dll

注意生成的DLL文件名hello.dll必须与Java中loadLibrary("hello")指定的名称一致,且需要将-I参数指向JDK的include目录以找到jni.h。

运行与结果验证

将生成的hello.dll放入系统路径或当前工作目录下,运行Java程序:

java HelloWorld

若控制台输出“Hello World!”,则证明JNI调用成功。以上就是Java中native关键字的详细解析及JNI调用流程,更多关于Java底层原理的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。