C в Java? Или ключевое слово native

122
01 февраля 2020, 07:00

public native int hashCode() впервые увидел вот такое слово native? Java Native Interface (JNI) — стандартный механизм для запуска кода, под управлением виртуальной машины Java (JVM), который написан на языках С/С++ или Ассемблера, и скомпонован в виде динамических библиотек, позволяет не использовать статическое связывание. Это даёт возможность вызова функции С/С++ из программы на Java, и наоборот.

Как это понять что C язык "находится" в Java?

Answer 1

Весьма старая инфа, однако, объясняет довольно понятно:

Если в процессе реализации Jаvа-проекта возникает необходимость в применении существующего кода, написанного на другом языке программирования, или использовании низкоуровневых функций для непосредственного обращения к компьютерной аппаратуре, существует возможность прибегнуть к так называемым методам native, которые могут быть вызваны из среды приложения Java, но создаются на одном из "родственных" (native) языков – как правило, С или С++. Nаtivе-методы объявляются посредством модификатора native. Тело метода реализуется на другом языке и поэтому в объявлении заменяется символом точки с запятой. Ниже в качестве примера приведено объявление метода, который обращается к операционной системе за информацией об идентификационном номере процессора хост-компьютера.

public native int getCPUID();

Единственное отличие методов native состоит в том, что они реализуются на другом языке программирования. В остальном они подобны обычным методам, т.е. могут быть переопределены, перегружены и снабжены любыми модификаторами – final, static, synchronized, public, protected или private (кроме abstract и strictfp).

При обращении к методам native свойства переносимости и безопасности, присущие коду Java, будут утрачены. Практически невозможно использовать методы native в Jаvа-коде, который предназначен для загрузки из Internet или выполнения на удаленных компьютерах сети (примером являются аплеты). Не исключено, что работать с вашим кодом придется системе совершенно другой архитектуры, но если даже это и не так, система может просто запретить выполнение кода, не вызывающего доверия.

Методы native реализуются с помощью библиотек API, предлагаемых разработчиками виртуальных машин Java для тех или иных платформ. Одна из стандартных библиотек API, предназначенных для программистов, использующих язык С, носит название JNI – от Java Native Iпterface. Существуют библиотеки и для других языков.

READ ALSO
Андроид-ардуино. Вывод данных с ардуино в textview

Андроид-ардуино. Вывод данных с ардуино в textview

Мне нужно просто получать данные с ардуина и выводить на textview построчноС данным кодом текст не выводится

156
Не верно определяются устройства

Не верно определяются устройства

Написал небольшой код, который в моем случае воспроизводит проблему, и не определяет устройства правильно

146
Почему Visual Studio ругается на fseek(f,-sizeof(char),SEEK_CUR)

Почему Visual Studio ругается на fseek(f,-sizeof(char),SEEK_CUR)

Мне нужно было перенести указатель файла на один символ назадПоэтому я использовал fseek(f,-sizeof(char),SEEK_CUR);

135
strcpy_s вызывает ошибку [закрыт]

strcpy_s вызывает ошибку [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»

142