Что такое нативные методы java

Русские Блоги

Изучая рабочий механизм JVM, я обнаружил, что область локального метода используется для выполнения собственного метода; так что в этом вопросе, что такое собственный метод?

Что такое Нативный метод

Объявление этих методов описывает, как выглядит не-java-код в этом java-коде.

Нативный идентификатор может использоваться со всеми другими идентификаторами Java.
За исключением abstract;, поскольку native подразумевает, что эти методы имеют тела реализации, но эти тела реализации не являются java, но abstract ясно указывает, что эти методы не имеют тел реализации.
Когда нативный метод используется вместе с другими идентификаторами Java, его смысл такой же, как и в случае нативного метода.

Собственная статика указывает, что этот метод можно вызывать напрямую, без создания экземпляра класса, что очень удобно;

Третий метод выше использует собственную синхронизацию, и JVM выполнит механизм блокировки синхронизации перед входом в реализацию этого метода (точно так же, как многопоточность Java).

Собственный метод может возвращать любой тип Java, а также может реализовывать управление исключениями;

Реализация этих методов вызывает исключение и выбрасывает его, что аналогично методу Java;

Когда собственный метод принимает некоторые неосновные типы, метод может получить доступ к внутренним компонентам этих неосновных типов, но это сделает собственный метод зависимым от реализации класса Java, к которому осуществляется доступ; это не так удобно, как использование функций на языке Java

Существование собственного метода не влияет на другие классы, вызывающие эти собственные методы. Фактически, другие классы, вызывающие эти методы, даже не знают, что он вызывает собственный метод.

JVM будет контролировать все детали вызова локальных методов

Класс, содержащий локальный метод, наследуется, подкласс унаследует локальный метод и может переписать этот метод на языке java (это кажется немного странным), то же самое, если локальный метод идентифицирован fianl, он не может быть унаследован Переписать

Собственные методы расширяют JVM;

Зачем использовать нативный метод

В Java непросто реализовать некоторые уровни задач в Java;
неэффективен для некоторых программ;

Взаимодействие между Java и средой за пределами Java

Это основная причина существования собственных методов: например, Java обменивается информацией с некоторыми базовыми системами, такими как операционные системы или некоторое оборудование;
Собственный метод предоставляет очень лаконичный интерфейс без необходимости знать детали вне приложения Java;

Взаимодействовать с операционной системой

JVM поддерживает сам язык Java и библиотеки времени выполнения; JVM также полагается на некоторую базовую поддержку; посредством использования собственных методов Java реализует взаимодействие между jre и системой формирования; при использовании некоторого языка Java сам по себе не обеспечивает характеристик инкапсулированного операционная система, нам также необходимо использовать локальные методы;

Sun‘Java

Интерпретатор Sun реализован на C; большая часть jre реализована на Java, который взаимодействует с внешним миром через некоторые локальные методы; например: метод setPriority () java.lang.Thread реализован на Java, но его реализация вызывает это class Локальный метод setPriority0 (); этот локальный метод реализован на C и имплантирован внутри JVM;

На платформе Windows 95 этот собственный метод в конечном итоге вызовет API Win32 SetPriority (). Это конкретная реализация локального метода, напрямую предоставляемого JVM. В большинстве случаев локальный метод предоставляется внешней библиотекой динамической компоновки, а затем вызывается JVM.

Как JVM запускает собственные методы

Когда класс используется впервые, байт-код этого класса будет загружен в память и будет перезагружен только один раз. Запись загруженного байт-кода содержит список всех дескрипторов методов этого класса. Эти дескрипторы методов содержат такую ​​информацию: где хранится код метода, какие параметры он имеет, дескриптор метода (открытый класс) и т. Д.

Источник

Ключевое слово и методы Java Native

Изучите основы собственных ключевых слов и методов Java.

1. Обзор

В этом кратком руководстве мы обсудим концепцию ключевого слова native в Java, а также покажем, как интегрировать методы native в код Java.

2. Ключевое слово native в Java

Прежде всего, давайте обсудим, что такое ключевое слово native в Java.

Он указывает на зависящую от платформы реализацию метода или кода, а также действует как интерфейс между JNI и другими языками программирования.

3. собственные методы

A родной метод-это метод Java (либо метод экземпляра, либо метод класса), реализация которого также написана на другом языке программирования, таком как C/C++.

Мы можем использовать их для:

4. Примеры

Теперь давайте продемонстрируем, как интегрировать эти методы в наш Java-код.

4.1. Доступ к машинному коду на Java

Чтобы загрузить его, мы будем использовать System.LoadLibrary.

4.2. Тестирование собственных методов

Наконец, давайте посмотрим, как мы можем протестировать собственные методы, определенные в классе DateTimeUtils :

Ниже приведен вывод регистратора:

Как мы видим, с помощью ключевого слова native мы успешно можем получить доступ к зависящей от платформы реализации, написанной на другом языке (в нашем случае C++).

5. Заключение

В этой статье мы изучили основы native ключевых слов и методов. На коротком примере мы также узнали, как интегрировать их в Java.

Источник

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

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

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

Как только вы видите небольшой пример, становится ясно:

Main.Java :

main.C :

Скомпилируйте и запустите :

Выход :

Протестировано на Ubuntu 14.04 с Oracle JDK 1.8.0_45.

Итак, ясно, что это позволяет:

Это может быть использовано для:

с компромиссом более низкой мобильности.

Вы также можете вызвать Java из C, но сначала вы должны создать JVM в C: Как вызывать Java функции из C++?

Пример на GitHub для вас, чтобы играть с.

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

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

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

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

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

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

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

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

Источник

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

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

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

5 ответов

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

Как только вы видите небольшой пример, становится ясно:

Main.java

main.c

Скомпилируйте и запустите :

Выход

Протестировано в Ubuntu 14.04 с Oracle JDK 1.8.0_45.

Итак, ясно, что это позволяет:

Это может быть использовано для:

с компромиссом более низкой мобильности.

Вы также можете вызывать Java из C, но вы должны сначала создать JVM в C: Как вызывать функции Java из C ++?

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

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

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

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

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

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

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

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

Источник

Native методы в Java. JNI (Java Native Interface).

Что такое native методы?

Наверно каждый, кто хоть немного знаком с Java, видел, а скорее всего даже использовал native методы. Примером такого метода может быть System.arrayCopy();, который позволяет скопировать часть одного массива в другой. Если мы откроем класс System и найдем этот метод то увидим следующее:

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

Из необычного можно заметить то самое ключевое слово native в сигнатуре метода перед типом возвращаемого значения и отсутствие реализации при том что он статический (static) и соответственно не абстрактный (нет модификатора abstract), из чего следует что он должен быть реализован. При этом метод работает и выполняет свою задачу. Вы сами можете в этом убедиться.

Давайте разберемся как такое возможно и научимся самостоятельно создавать native методы.

Модификатор native.

Native (от англ. native — родной, естественный, первичный) — этот модификатор, используется исключительно с методами и указывает на то, что он (метод) реализуется на платформозависимом коде, обычно написаном на другом языке программирования, например C, C++, ASSEMBLER и не имеет тела, аналогично абстрактному методу.

Примерно это описано в спецификации Java.

Из этого определения можно понять что реализация native метода на самом деле написана на другом языке.

Как же это работает? И для чего это нужно?

Механизм позволяющий вызывать из Java методы написанные на других языках называется Java Native Interface и входит в стандартную поставку JRE, никаких дополнительных библиотек для этого подключать не нужно.

Необходимость использовать его возникает в трех случаях:

1) Код уже написан на другом языке
2) Нужно реализовать что-то, что нельзя сделать с помощью Java (например работа со специфической техникой)

3) Ускорение выполнения метода

Собственный native метод

От теории перейдем к практике. Для начала напишем простой метод native метод на языке C++ выводящий строку в консоль.

1) Для начала создадим класс и определим в нем метод

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

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

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

Это происходит потому что метод nativeHelloWorld() объявлен но не определен.

Перейдем в директорию с проектом используя команду cd:

И выполним команду следующего вида:

В моем случае это выглядит так:

После чего в папке /src/ появляется еще два файла

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

В данном случае нас интересует заголовочный файл MyNativeClass.h

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

Не буду вдаваться в подробности языка C++, не это цель данной статьи, скажу лишь что для нас тут важны следующие строки:

Это будет сигнатурой метода. Замечу что в метод мы принимаем два параметра

3) Создадим файл MyNativeClass.cpp в котором и будет находиться реализация нашего метода

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

4) Далее нам нужно скомпилировать файл в библиотеку, а для этого нужен компилятор C++. Я использую GCC.

Чтобы и вы могли выполнять все следующие действия, вам необходимо его установить.

Команда должна иметь следующий вид:

gcc — обращение к компилятору

-I — опция компилятора, которая используется для добавления ваших собственных каталогов для поиска заголовочных файлов в процессе сборки

$/include — путь к файлу jni.h необходимого для работы JNI

$/include/darwin — путь к файлу jni_md.h дополнительно необходимого для работы JNI в Mac OS ($/include/win32 для Windows)

-o — опция компилятора, которая используется для указания имени файла

libmylib.jnilib — название нашей библиотеки

Обращаю внимание что название библиотеки ОБЯЗАТЕЛЬНО должно начинаться с lib.

-shared — указание типа библиотеки

./src/NativeBubbleSort.cpp — путь к компилируемому файлу

Тут так же обращу внимание что этот файл обязательно должен лежать именно в корне проекта, как на следующем скриншоте.

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

5) Осталось подключить библиотеку и наконец попробовать вызвать метод.

Класс будет выглядеть следующим образом:

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

Нужно указать именно название библиотеки без префикса lib.

Запустим метод main.

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

Метод отработал как и ожидалось.

Native bubble sort

Нативный HelloWorld это конечно хорошо, но хотелось бы написать что-то действительно полезное. Давайте реализуем пузырьковую сортировку на языке C++.

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

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

В данном случае я решил реализовать не статический метод.

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

Видим, что в данном случае jclass заменился на jobject — это произошло как раз потому что мы используем не статический метод и получаем ссылку на объект а не на класс. Так же добавилась jintArray — ссылка на массив который принимает наш метод, и тип возвращаемого значения так же изменился на jintArray.

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

Тут стоит отметить 2 момента:

1) В данном случае нам необходимо реально использовать Java машину и принимаемый Java массив, поэтому в сигнатуре добавим ссылки на них

2) C типами данных из Java невозможно работать в C++ как с обычными данными, для этого необходимо использовать JVM.

В данном случае мы используем ее 3 раза:

С полным списком функций JNI можно ознакомиться тут.

Что такое нативные методы java. Смотреть фото Что такое нативные методы java. Смотреть картинку Что такое нативные методы java. Картинка про Что такое нативные методы java. Фото Что такое нативные методы java

Массив отсортирован, метод отработал верно.

Заключение

В данной статье рассмотрена только малая часть возможностей JNI.

Но теперь вы знаете что это такое, а главное умеете самостоятельно создавать native методы. Те, кому интересна данная технология могут попробовать решить и другие задачи, используя JNI. Делитесь своим кодом в комментариях.

Если вам интересно сравнение скорости работы обычных и native методов — пишите, и я обязательно расскажу и об этом в одной из следующих статей.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *