Нативный метод имеет тот же синтаксис, что и абстрактный метод, но где он реализован?
Что такое встроенные методы в Java и где они должны использоваться?
Ответ 1
Каковы собственные методы на 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
Протестировано на Ubuntu 14.04 с Oracle JDK 1.8.0_45.
Итак, понятно, что он позволяет вам:
- вызов скомпилированной динамически загруженной библиотеки (здесь написанной на C) с произвольным кодом сборки из Java
- и вернуть результаты в Java
Это можно использовать для:
- написать более быстрый код в критическом разделе с более точными инструкциями по сборке процессора (не ЦП)
- делать прямые системные вызовы (не переносимые ОС)
с компромиссом более низкой переносимости.
Вы также можете вызвать Java из C, но сначала вы должны создать JVM в C: Как вызвать функции Java из С++?
Пример для GitHub для вас.
Ответ 2
Метод реализован в "родном" коде. То есть код, который не запускается в JVM. Обычно он написан на C или С++.
Нативные методы обычно используются для взаимодействия с системными вызовами или библиотеками, написанными на других языках программирования.
Ответ 3
Мне нравится знать, где мы используем Native Methods
В идеале, совсем нет. На самом деле некоторые функции недоступны в Java, и вам нужно вызвать некоторый код C.
Методы реализуются в коде C.
Ответ 4
Нативные методы позволяют использовать код из других языков, таких как C или С++, в вашем Java-коде. Вы используете их, когда Java не предоставляет необходимые вам функциональные возможности. Например, если я пишу программу для вычисления некоторого уравнения и создаю линейный граф, я бы использовал java, потому что это язык, на котором я лучше всего. Тем не менее, я также владею C. Скажите в части моего мне нужно вычислить действительно сложное уравнение. Я бы использовал собственный метод для этого, потому что я знаю некоторые С++, и я знаю, что С++ намного быстрее, чем java, поэтому, если бы я написал свой метод на С++, это было бы быстрее. Также, скажем, я хочу взаимодействовать с другой программой или устройством. Это также будет использовать собственный метод, потому что С++ имеет что-то, называемое указателями, что позволило бы мне это сделать.
Ответ 5
Необходимый код на языке Java:
- h/w доступ и управление.
- использование коммерческих s/w и системных сервисов [h/w related].
- использование устаревшего s/w, которое не переносится или не может быть перенесено на Java.
- Использование собственного кода для выполнения критически важных задач.
надеюсь, что эти вопросы отвечают на ваш вопрос:)