Java中的本地方法是什么?它们应该用在哪里?

本地方法与抽象方法具有相同的语法,但它在哪里实现?

Java中的本地方法是什么?它们应该用在哪里?

一旦你看到一个小例子,就会明白:

Main.java

public class Main { public native int intMethod(int i); public static void main(String[] args) { System.loadLibrary("Main"); System.out.println(new Main().intMethod(2)); } } 

Main.c

 #include <jni.h> #include "Main.h" JNIEXPORT jint JNICALL Java_Main_intMethod( JNIEnv *env, jobject obj, jint i) { return i * i; } 

编译并运行

 javac Main.java javah -jni Main gcc -shared -fpic -o libMain.so -I${JAVA_HOME}/include \ -I${JAVA_HOME}/include/linux Main.c java -Djava.library.path=. Main 

输出

 4 

使用Oracle JDK 1.8.0_45testingUbuntu 14.04。

所以很明显,它可以让你:

  • 使用Java中的任意汇编代码调用一个编译的dynamic加载的库(这里用C编写)
  • 并将结果返回到Java

这可以用来:

  • 在关键部分使用更好的CPU汇编指令编写更快的代码(不是CPU便携式)
  • 直接进行系统调用(不是OS便携式)

与便携性较低的权衡。

您也可以从C中调用Java,但是您必须先在C中创build一个JVM: 如何从C ++调用Java函数?

在GitHub上的例子 ,你玩。

该方法在“本地”代码中实现。 也就是说,不在JVM中运行的代码。 它通常用C或C ++编写。

本地方法通常用于与其他编程语言编写的系统调用或库进行接口。

我想知道我们在哪里使用本机方法

理想情况下,不是。 实际上,某些function在Java中不可用,您必须调用一些C代码。

这些方法在C代码中实现。

本地方法允许您在Java代码中使用其他语言(如C或C ++)的代码。 当java不提供你需要的function时,你可以使用它们。 例如,如果我正在编写一个程序来计算一些方程并创build一个线性图,我会使用java,因为它是我最好的语言。但是,我也精通C.说我的一部分程序我需要计算一个非常复杂的方程。 我会用一个本地方法,因为我知道一些C ++,我知道C ++比Java更快,所以如果我用C ++编写我的方法会更快。 另外,说我想与其他程序或设备进行交互。 这也会使用本地方法,因为C ++有一些叫做指针的东西,这会让我这样做。

Java本地代码必需品:

  • h / w访问和控制。
  • 使用商业软件和系统服务[h / w相关]。
  • 使用没有或不能移植到Java的传统软件。
  • 使用本机代码执行时间关键的任务。

希望这些点回答你的问题:)