Java中的本机方法是什么?它们应该在何处使用?

What are native methods in Java and where should they be used?

本问题已经有最佳答案,请猛点这里访问。

本机方法与抽象方法具有相同的语法,但它在何处实现?


What are native methods in Java and where should they be used?

一旦你看到一个小例子,它变得清晰:

Main.java:

1
2
3
4
5
6
7
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:

1
2
3
4
5
6
7
#include <jni.h>
#include"Main.h"

JNIEXPORT jint JNICALL Java_Main_intMethod(
    JNIEnv *env, jobject obj, jint i) {
  return i * i;
}

编译并运行:

1
2
3
4
5
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

输出:

1
4

使用Oracle JDK 1.8.0_45在Ubuntu 14.04上进行了测试。

所以很明显它允许你:

  • 使用Java中的任意汇编代码调用已编译的动态加载库(此处用C语言编写)
  • 并将结果返回Java

这可以用于:

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

与低便携性的权衡。

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

GitHub上的示例供您玩。


该方法以"本机"代码实现。也就是说,代码不能在JVM中运行。它通常用C或C ++编写。

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


I like to know where does we use Native Methods

理想情况下,完全没有。实际上,Java中没有某些功能,您必须调用一些C代码。

这些方法用C代码实现。


Java本机代码必需品:

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

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


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