【JavaGuide学习笔记】什么,Java中 native 也是一个关键字?
博主之前从来没有了解过这个关键字,在 JavaGuide 的 Object 类中偶然发现,于是便在此补充了解一下
📕对应位置:【JavaGuide ->Java基础常见面试题总结(中)->Object】
来源
native
关键字是Java编程语言的标准组成部分,源于Java Native Interface (JNI) 机制。JNI 是Java平台的一个框架,允许Java代码与用其他语言(如C、C++或汇编)编写的本地应用程序和库进行交互。native
关键字最早出现在Java 1.0版本中,用于支持Java虚拟机(JVM)与底层操作系统或硬件的集成。
这使得Java程序能够调用非Java代码,从而处理一些Java本身不擅长或无法高效处理的低级操作,例如直接访问硬件、调用系统API或优化性能关键的部分。
同胞(相关关键字)
出乎意料地,它的好朋友我们倒是见得不少:
在Java中,native
属于方法修饰符(method modifier)的一员,与其他修饰符共同用于定义方法的特性,类似关键字包括:
- abstract:用于声明抽象方法,没有方法体,必须在子类中实现。
- static:声明静态方法,属于类而非实例,可直接通过类名调用。
- final:声明方法不可被子类重写。
- synchronized:用于线程同步,确保方法在多线程环境中安全执行。
- strictfp:确保浮点运算严格遵守IEEE 754标准(较少使用)。
这些关键字都是方法或类的修饰符,但native
独特之处在于它表示方法实现不在Java代码中,而在本地代码库中。
作用
native
关键字的主要作用是声明一个方法为“本地方法”(native method),即方法的实现不是用Java语言编写的,而是用其他编程语言(如C或C++)在本地动态链接库(DLL或SO文件)中实现。使用native
时:
-
方法声明中只需写方法签名(包括返回类型、方法名和参数),但没有方法体(即没有大括号{}内的代码)。
-
JVM在运行时会通过JNI加载并调用相应的本地代码。
-
常见应用场景:
- 访问系统资源:如文件I/O、网络套接字或图形界面(例如Java的标准库中许多方法如
Object
类的hashCode()
、clone()
等就是native的)。 - 性能优化:对于计算密集型任务,本地代码可能更快。
- 集成遗留系统:调用现有的C/C++库。
- 访问系统资源:如文件I/O、网络套接字或图形界面(例如Java的标准库中许多方法如
示例
public class NativeExample {// 声明一个native方法public native void nativeMethod(String param);// 在静态块中加载本地库static {System.loadLibrary("nativeLib"); // 加载名为libnativeLib.so或nativeLib.dll的库}
}
在实际使用中,需要用C/C++编写对应的本地实现,并生成头文件(使用javah
工具或现代的javac -h
)来匹配Java方法签名。
注意事项
- 使用
native
会降低Java的平台无关性,因为本地代码依赖于特定操作系统和架构。 - 潜在风险:本地代码可能引入内存泄漏或安全漏洞,需要小心处理。
- 在
Object
类中,如getClass()
、hashCode()
、equals()
等方法的部分实现使用了native
,以确保高效性和与JVM的紧密集成。