Что такое нативные методы в Java и где их следует использовать? [Дубликат]

    

На этот вопрос уже есть ответ здесь:

    

Нативный метод имеет тот же синтаксис, что и абстрактный метод, но где он реализован?

66 голосов | спросил niks 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 19 Sep 2013 20:57:10 +0400 2013, 20:57:10

5 ответов


0
  

Что такое нативные методы в 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 из C ++?

Пример на GitHub , с которым можно поиграть.

ответил Ciro Santilli 新疆改造中心 六四事件 法轮功 28 MaramSat, 28 Mar 2015 01:22:46 +03002015-03-28T01:22:46+03:0001 2015, 01:22:46
0

Метод реализован в «родном» коде. То есть код, который не запускается в JVM. Обычно он написан на C или C ++.

Собственные методы обычно используются для взаимодействия с системными вызовами или библиотеками, написанными на других языках программирования.

ответил Laurence Gonsalves 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 19 Sep 2013 20:59:11 +0400 2013, 20:59:11
0
  

Мне нравится знать, где мы используем родные методы

В идеале, совсем нет. На самом деле некоторые функции недоступны в Java, и вам нужно вызывать код на C.

Методы реализованы в коде C.

ответил Peter Lawrey 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 19 Sep 2013 20:58:58 +0400 2013, 20:58:58
0

Необходимость собственного кода Java:

  • ч /б доступ и контроль.
  • использование коммерческих программных и системных услуг [h /w related].
  • использование устаревшего программного обеспечения, которое не было или не может быть перенесено на Java.
  • Использование собственного кода для выполнения срочных задач.

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

ответил Cjo 9 72014vEurope/Moscow11bEurope/MoscowSun, 09 Nov 2014 09:02:45 +0300 2014, 09:02:45
0

Нативные методы позволяют вам использовать код из других языков, таких как C или C ++, в вашем Java-коде. Вы используете их, когда Java не предоставляет необходимую вам функциональность. Например, если бы я писал программу для вычисления какого-либо уравнения и построения его линейного графика, я бы использовал java, потому что это язык, на котором я лучше всего. Однако я также хорошо владею C. Скажу в части моего Программа мне нужна для вычисления действительно сложного уравнения. Я бы использовал для этого нативный метод, потому что я знаю немного C ++ и знаю, что C ++ намного быстрее, чем Java, поэтому, если бы я написал свой метод на C ++, он был бы быстрее. Также, скажем, я хочу взаимодействовать с другой программой или устройством. При этом также использовался бы нативный метод, потому что в C ++ есть что-то, называемое указателями, что позволило бы мне сделать это.

ответил Zac 4 J0000006Europe/Moscow 2014, 00:22:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132