版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/swjtu2014112194/article/details/85111987
什么是native方法(本地方法)
native方法就是java调用非java代码的接口。native方法是这样一个java方法:该方法的实现由非java语言实现,比如C。
定义一个native方法,不提供方法体(类似于抽象方法)。因为其方法体是由非java语言在外面实现的。
例如Object类:
package java.lang;
public class Object {
......
public final native Class<?> getClass();
public native int hashCode();
protected native Object clone() throws CloneNotSupportedException;
public final native void notify();
public final native void notifyAll();
public final native void wait(long timeout) throws InterruptedException;
......
}
标识符native可以与所有其他java标识符连用,但是abstract除外。因为native方法暗示方法有方法体,只不过方法体是非java的。而abstract表示没有方法体。
如果一个含有本地方法的类被继承,子类会继承这个本地方法并且可以用java语言重写这个方法(似乎有点奇怪)。但如果本地方法被final标识,它被继承后不能被重写。
使用方法
native方法对应的实现不在当前文件,而是在其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。
JNI是Java本机接口(Java Native interface),它是JDK的一部分。JNI允许Java代码使用以其他语言编写的代码和代码库。Invocation API(JNI的一部分)可以用来将Java虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员在本机代码内部调用Java代码。
JNI的书写步骤如下:
- 编写带有native方法的java类
- 使用javac编译java类
- 使用javah –jni来生成后缀名为.h的头文件
- 使用其他语言(C,C++)实现本地方法
- 将本地方法编写的文件生成动态链接库