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

时间:2013-09-19 16:57:11

标签: java native

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

5 个答案:

答案 0 :(得分:126)

  

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_45在Ubuntu 14.04上测试。

很明显它允许你:

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

这可以用于:

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

与较低的便携性进行权衡。

您也可以从C调用Java,但必须先在C中创建JVM:How to call Java functions from C++?

Example on GitHub让你玩。

答案 1 :(得分:43)

该方法在&#34; native&#34;中实现。码。也就是说,代码不能在JVM中运行。它通常用C或C ++编写。

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

答案 2 :(得分:14)

  

我想知道我们在哪里使用原生方法

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

这些方法是用C代码实现的。

答案 3 :(得分:5)

Java本机代码必需品:

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

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

答案 4 :(得分:3)

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