native关键字作用及底层实现

Native关键字

在介绍Native关键字之前,首先要知道JNI,接下来先介绍一下JNI

JNI(Java Native Interface)java本地接口

  • JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。 从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。下图是JNI在JVM中的位置

image-20201009110057662

  • JNI实现了JavaCode和其他Code的交互

image-20201009110525250

Native的作用

  • native关键字用于修饰java方法,jvm在编译到这条指令时可以知道该方法时外部定义的,也就是其他语言编写的,jvm就会去JNI里找对应的接口,进而调用对应的本地方法。
  • native关键字可以和其他语言的交互
  • java不能直接操作操作系统,因此可以通过native、JNI来实现对操作系统的控制

Native的使用

  • 在Java中声明native()方法,然后编译;

  • 用javah产生一个.h文件;

  • 写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);

  • 将第三步的.cpp文件编译成动态链接库文件;

  • 在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。
    在这里插入图片描述

注意:native关键字不能和abstract关键字同时使用,因为native关键字虽然没有在java代码中实现,但是会通过其他代码进行实现

本文参考链接