ネイティブメソッドの構文は抽象メソッドと同じですが、どこに実装されていますか?
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を作成する必要があります。 C++からJava関数を呼び出す方法
GitHubの例 一緒に遊ぶ。
このメソッドは「ネイティブ」コードで実装されます。つまり、JVMで実行されないコード。通常、CまたはC++で記述されています。
ネイティブメソッドは通常、他のプログラミング言語で記述されたシステムコールまたはライブラリとのインターフェイスに使用されます。
ネイティブメソッドをどこで使用するかを知りたい
理想的には、まったくありません。実際には、いくつかの機能はJavaで使用できないため、Cコードを呼び出す必要があります。
メソッドはCコードで実装されます。
Javaネイティブコードの必需品:
これらのポイントがあなたの質問に答えることを望みます:)
ネイティブメソッドを使用すると、JavaコードでCやC++などの他の言語のコードを使用できます。 Javaが必要な機能を提供しない場合に使用します。たとえば、方程式を計算してその折れ線グラフを作成するプログラムを作成している場合、Javaを使用します。これは、Javaが最適な言語だからです。しかし、Cにも精通しています。プログラム私は本当に複雑な方程式を計算する必要があります。 C++の一部を知っていて、C++がJavaよりもはるかに高速であることを知っているので、このためにネイティブメソッドを使用します。また、別のプログラムまたはデバイスとやり取りしたいとします。 C++にはポインターと呼ばれるものがあるため、ネイティブメソッドも使用します。