Что такое встроенные методы в 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.
  • Использование собственного кода для выполнения критически важных задач.

надеюсь, что эти вопросы отвечают на ваш вопрос:)