Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

Для чего в классе Object некоторые методы имеют модификатор native?

#java #c #jni


Зачем в Java нужен модификатор native и для чего в классе Object некоторые методы
помечены им?
    


Ответы

Ответ 1



native указывает, что метод реализуется не в Java коде. В связке с JNI (Java Native Interface) идёт. Как правило, подразумевается, что метод реализован в c коде. Работа с диском, сеть и т.п. реализованы в Си части, и Java обёртки вызывают эти методы. Под рукой сейчас только Ubuntu. Пример на ней покажу. Есть у вас основной 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(4)); } } И c файл Main.c: #include #include "Main.h" JNIEXPORT jint JNICALL Java_Main_intMethod (JNIEnv *env, jobject obj, jint i) { return i * 2; } Ещё Makefile для сборки: .PHONY: all clean all: 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 clean: rm -f *.class *.so Main.h Запустим всё это дело: 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 На экране увидите: 8. Предварительные настройки: Установлен jdk, самой собой. Установить essential: sudo apt-get install build-essential. Путь прописать до Java. У меня это export JAVA_HOME='/usr/java/jdk1.8.0_131' Пример показывает, как из Java вызвать Си код и вернуть результат. Когда это надо? OS зависимые вещи. Какие-то сложные вычисления. Часто математические библиотеки написаны на Си.

Комментариев нет:

Отправить комментарий