本机方法与抽象方法具有相同的语法,但它在哪里实现?
答案 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上测试。
很明显它允许你:
这可以用于:
与较低的便携性进行权衡。
您也可以从C调用Java,但必须先在C中创建JVM:How to call Java functions from C++?
答案 1 :(得分:43)
该方法在&#34; native&#34;中实现。码。也就是说,代码不能在JVM中运行。它通常用C或C ++编写。
本机方法通常用于与系统调用或用其他编程语言编写的库进行交互。
答案 2 :(得分:14)
我想知道我们在哪里使用原生方法
理想情况下,完全没有。实际上,Java中没有一些功能,你必须调用一些C代码。
这些方法是用C代码实现的。
答案 3 :(得分:5)
Java本机代码必需品:
希望这些要点回答你的问题:)
答案 4 :(得分:3)
本机方法允许您在Java代码中使用来自其他语言(如C或C ++)的代码。当java不提供您需要的功能时,您可以使用它们。例如,如果我正在编写一个程序来计算某个方程并创建它的线图,我会使用java,因为它是我最好的语言。但是,我也精通C.在我的一部分说程序我需要计算一个非常复杂的方程式。我会使用本机方法,因为我知道一些C ++,我知道C ++比java快得多,所以如果我用C ++编写我的方法会更快。另外,假设我想与其他程序或设备进行交互。这也可以使用本机方法,因为C ++有一些叫做指针的东西,让我这样做。