1. Что такое родной метод
Проще говоря, нативный метод-это интерфейс, в котором Java вызывает не Java-код. Настоящий метод-это метод Java: реализация этого метода реализована не Java, таким как C. Эта функция не является уникальной для Java. Многие другие языки программирования имеют этот механизм. Например, в C ++ вы можете использовать Extern «C», чтобы сообщить компилятору C ++ для вызова функции C.
«Нативный метод-это метод Java, реализация которой предоставляется не Java Code».
При определении нативного метода орган реализации не предоставляется (некоторые похожи на определение интерфейса Java), поскольку его орган реализации реализуется вне Java Language. , Вот пример:
Пакет java.lang; открытый объект класса {...... открытый окончательный нативный класс <?> getClass (); общественный родной int hashcode (); Защищенный нативный объект клон () бросает клоненотсупорноэкспений; Public Final Native void notify (); Public Final Native void notifyall (); Общественное окончательное void wat (долгой тайм -аут) бросает прерывание; ......}Идентификатор уроженец может использоваться со всеми другими идентификаторами Java, кроме абстрактного. Это разумно, потому что Native подразумевает, что эти методы имеют тела реализации, но эти тела реализации не являются Java, но абстрактная, очевидно, указывает на то, что эти методы не имеют тел внедрения. Когда используются родные и другие идентификаторы Java, их значение ничем не отличается от значения неродных методов.
Нативный метод может вернуть любой тип Java, включая непримизные типы, а также может выполнять контроль исключений. Реализация этих методов может сделать исключение и бросить его, что очень похоже на метод Java.
Существование нативного метода не оказывает никакого влияния на другие классы, называющие эти локальные методы. На самом деле, другие классы, которые называют эти методы, даже не знают, что он вызывает локальный метод. JVM будет управлять всеми деталями вызова локального метода.
Если класс, содержащий локальный метод, унаследован, подкласс будет наследовать локальный метод и может переписать метод в Java (это кажется немного странным). Точно так же, если Fianl идентифицируется локальный метод, его нельзя переписать после того, как он унаследован.
Местные методы очень полезны, потому что они эффективно расширяют JVM. На самом деле, код Java, который мы пишем, использовал локальные методы. В реализации механизма параллелизма Java от Sun (многопотоковая) многие контактные точки с операционной системой используют локальные методы, что позволяет программам Java превышать границы времени выполнения Java. С помощью местных методов программы Java могут выполнять любые задачи на уровне приложения.
2. Как использовать
Нативное ключевое слово указывает, что его метод модификации является исходным методом. Соответствующей реализации метода не в текущем файле, а в файлах, реализованных на других языках (таких как C и C ++). Сам язык Java не может получить доступ и управлять основным уровнем операционной системы, но он может использовать интерфейс JNI для вызова других языков для достижения доступа к базовому уровню.
JNI является нативным интерфейсом Java, нативным интерфейсом программирования, который является частью комплекта разработки программного обеспечения Java (SDK). JNI позволяет коду Java использовать кодовые и кодовые базы, написанные на других языках. API вызова (часть JNI) может использоваться для встраивания виртуальных машин Java (JVMS) в собственные приложения, позволяя программистам вызывать код Java из внутреннего нативного кода.
Тем не менее, призывы к внешней Java обычно не могут быть перенесены на другие платформы, а исключения безопасности также могут быть подняты в апплетах. Реализация нативного кода предотвратит прохождение приложения Java 100% чистого Java. Однако, если локальный вызов должен быть выполнен, есть несколько рекомендаций, которые следует рассмотреть:
1. Инкапсулируйте все ваши локальные методы в класс, который вызывает один DLL. Для каждой платформы целевой операционной системы можно использовать версию DLL, специфичную для соответствующей платформы. Это сводит к минимуму влияние локального кода и помогает учитывать необходимые проблемы с переносом позже.
2. Локальный метод как можно проще. Постарайтесь свести к минимуму зависимость вашего локального метода от сторонних (включая Microsoft) DLL. Сделайте свой локальный метод как можно более независимым, чтобы минимизировать накладные расходы, необходимые для загрузки вашего DLL и приложения. Если требуется DLL во время выполнения, он должен быть предоставлен приложением.
Записывающие шаги JNI следующие:
Вот простой пример вызова локальной программы C в Java:
а Напишите класс helloworld.java
Класс helloworld {public native void hello (); static {System.loadLibrary ("hello");} public static void main (string [] args) {new helloworld (). hello ();}}беременный Перевод
Javac helloworld.java
в Генерировать файл .h
Javah -Jni Helloworld
Сгенерированный контент заключается в следующем:
/* Не редактируйте этот файл - он сгенерирован на машине*/#include <jni.h>/* Заголовок для класса Helloworld*/#ifndef _included_helloworld#define _included_helloworld#ifdef __cplusplusextern "c" {#endif/** class: helloworld* method: Jnicall java_helloworld_hello (jnienv *, jobject);#ifdef __cplusplus}#endif#endifПервым параметром является указатель среды JNI, используемый при вызове метода JNI. Второй параметр - это ручка для объекта Java Helloworld, созданного в этом коде Java. Другие параметры являются параметрами самого метода
Реализация DC
#include <jni.h> #include "helloworld.h" #include <stdio.h> jniexport void jnicall java_helloworld_hello (jnienv *env, jobject obj) {printf ("Привет, мир!/n"); return;}Среди них первая строка состоит в том, чтобы ввести файл jni.h (в %java_home %/include), который содержит определения Jnienv и Jobject.
эн. Compile C реализация
Здесь, взяв Windows в качестве примера, вам нужно сгенерировать файл DLL. В папке Save Helloworldimpl.c используйте компилятор VC, чтобы создать его.
cl -i%java_home%/include -i%java_home%/include/win32 -ld helloworldimp.c -fehello.dll
ПРИМЕЧАНИЕ. Сгенерированное имя файла DLL настроено после опции -fe -fe, вот привет, потому что имя, которое мы используем, когда LoadLibary в файле helloworld.java Hello. Конечно, после модификации здесь также необходимо изменить там. Кроме того, необходимо добавить параметр -i%java_home%/include -i%java_home%/include/win32, поскольку файл jni.h введен при написании локального метода на четвертом этапе.
фон Запустите программу
Java Helloworld в порядке!
Выше приведено подробное введение в родные ключевые слова в Java, и я надеюсь, что это будет полезно для каждого обучения.