1. 概述

在本篇文章中,我们将深入探讨 Java 中的 native 关键字,并展示如何在 Java 程序中集成和使用 native 方法。

2. Java 中的 native 关键字

首先,我们来了解一下 Java 中的 native 关键字到底是什么。

简单来说,native 是一个非访问修饰符,用于标识那些由非 Java 语言(如 C 或 C++)实现的方法。

它表明这个方法的实现依赖于平台,并且充当了 JNI(Java Native Interface) 与其他编程语言之间的桥梁。

3. native 方法

native 方法本质上是一个 Java 方法(可以是实例方法或类方法),但其实现是用其他语言(如 C/C++)编写的。

⚠️ 特别注意:标记为 native 的方法不能有方法体,必须以分号结尾:

[ public | protected | private ] native [return_type] method ();

使用 native 方法的常见场景包括:

  • 实现需要调用系统调用或外部库的功能
  • 访问只有其他语言才能访问的硬件或系统资源
  • 在 Java 应用中复用已有的 C/C++ 老代码
  • 从 Java 中调用动态加载的本地库

4. 示例演示

接下来,我们通过示例展示如何在 Java 中集成和使用 native 方法。

4.1. 在 Java 中调用本地代码

首先,我们创建一个名为 DateTimeUtils 的类,其中包含一个平台相关的 native 方法 getSystemTime

public class DateTimeUtils {
    public native String getSystemTime();
    // ...
}

为了加载本地库,我们使用 System.loadLibrary 方法。
建议将其放在 static 静态初始化块中,确保类加载时就完成库的加载:

public class DateTimeUtils {
    public native String getSystemTime();

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

在这个例子中,我们已经用 C++ 实现了一个名为 nativedatetimeutils 的动态链接库,其中包含了 getSystemTime 方法的具体实现。实现细节可参考我们的 JNI 指南

4.2. 测试 native 方法

接下来,我们看看如何对 DateTimeUtils 类中的 native 方法进行测试:

public class DateTimeUtilsManualTest {

    @BeforeClass
    public static void setUpClass() {
        // 加载依赖的本地库
        System.loadLibrary("nativedatetimeutils");
    }

    @Test
    public void givenNativeLibsLoaded_thenNativeMethodIsAccessible() {
        DateTimeUtils dateTimeUtils = new DateTimeUtils();
        LOG.info("System time is : " + dateTimeUtils.getSystemTime());
        assertNotNull(dateTimeUtils.getSystemTime());
    }
}

下面是日志输出示例:

[main] INFO  c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018

✅ 从上面的例子可以看出,借助 native 关键字,我们成功调用了由 C++ 实现的平台相关代码。

5. 总结

本文我们讲解了 Java 中 native 关键字和 native 方法的基本概念,并通过一个简单示例展示了如何将它们集成到 Java 程序中。

如果你需要查看本文中使用的完整代码,可以前往 GitHub 项目地址 获取。


原始标题:The Java Native Keyword and Methods

« 上一篇: Java 基础语法入门
» 下一篇: Java Weekly, 第262期