В первый раз, когда я встретил Nation
общественный родной int hashcode ();
Почему есть уроженец? Это то, чему я хочу научиться. Поэтому я хочу подвести итоги нативного ниже.
1. Понять родной, то есть jni, родной интерфейс Java
Все языки надеются быть чистыми. Например, если вы хотите решить определенное решение, просто напишите его на этом языке. Платформа Java имеет API для пользователей, чтобы взаимодействовать с локальным C -кодом, называемым Native Interface Java (Java Local Interface).
2. Позвоните в C "Привет, JNI" на Java
Нам нужно выполнить шаги, которые удобны для работы:
1. Создайте класс Java , который содержит нативный метод и метод Loadlibrary библиотеки загрузки. Код hellonative.java выглядит следующим образом:
открытый класс hellonative {static {System.loadlibrary ("hellonative"); } public static Native void sayshello (); @Suppresswarnings ("static-access") public static void main (string [] args) {new hellonative (). Sayhello (); }}Первое, что нужно отметить, это нативный метод, и библиотека загрузки также работает позже. Нативное ключевое слово сообщает компилятору (фактически JVM), что метод определяется извне, и здесь относится к C. Если вы запустите этот код напрямую, JVM скажет вам: «Исключение Java произошло». Выход консоли выглядит следующим образом:
Исключение в ветке "Main" java.lang.unsatisfiedlinkerror: no hellonative in java.library.path на java.lang.classloader.loadlibrary (неизвестный источник) на java.lang.runtime.loadlibrary0 (неизвестный источник) на java.lang.lang.loadlibrar Hellonative. <Clinit> (hellonative.java:5)
Это когда программа использует ее, виртуальная машина говорит, что не знает, как найти Sayhello. Вы можете написать это вручную ниже, так что для Мейсона естественно использовать
2. Запустите Javah, чтобы получить файл заголовка C Declaration C, содержащий метод.
Поместите hellonative.java, просто Javac Javah, как показано на рисунке
Я получил следующий файл hellonative.h :
/ * Не редактируйте этот файл - он сгенерирован на машине */#include <jni.h>/ * Заголовок для класса Hellonative */#ifndef _included_hellonative#define _included_hellonative#ifdef __cplusplusextern "{#endif/ * class: hallonative * method: sayhello * vportx: () vportx: () vpart Jnicall java_hellonative_sayhello (jnienv *, jclass); #ifdef __cplusplus}#endif#endifjni.h этот файл, в /%java_home%включает
3. Напишите C, чтобы реализовать локальные методы в соответствии с файлом заголовка.
Здесь мы просто реализуем этот метод Sayhello следующим образом:
#include "hellonative.h" #include <stdio.h> jniexport void jnicall java_hellonative_sayhello {printf ("hello, jni"); }4. Создайте библиотеку DLL Share, затем загрузите программу Java и позвоните ее.
В Windows Mingw GCC работает следующим образом
GCC -M64 -WL, -ADD -STDCALL -ALIAS -I "C:/Program Files/java/jdk1.7.0_71/include" -i "c:/program files/java/jdk1.7.0_71/include/include/win32" -shared -o hallonative.dll hellonative.c
-M64 означает, что сгенерированная библиотека DLL составляет 64-битную. Тогда запустите hellonative:
Java hellonative
Наконец, я вижу, что консоль печатает следующим образом:
Привет, JNI
3.
4. Другие введения
Наземный используется при совместном разработке с C ++! Вам не нужно разрабатывать Java самостоятельно!
Используйте нативные ключевые слова, чтобы указать, что этот метод является собственной функцией, то есть этот метод реализован на языке C/C ++ и составлен в DLL и вызывается Java.
Тела реализации этих функций не включены в исходный код JDK, и вы не должны их видеть. Они также разные для разных платформ. Это также основной механизм Java. Фактически, Java вызывает различные собственные методы на разных платформах для достижения доступа к операционной системе.
1. Нативные используются для сотрудничества с другими языками (такими как C ++), то есть реализация собственных функций не написана на Java.
2. ни одна из Java, не беспокойтесь о его исходном коде, ха -ха
Нативный означает уведомление операционной системы.
Вы должны реализовать эту функцию для меня, потому что я хочу ее использовать.
Следовательно, функции собственных ключевых слов реализованы операционной системой, и Java может быть вызвана только.
Java-кроссплатформенный язык. Поскольку он является кроссплатформенным, платная цена состоит в том, чтобы пожертвовать некоторым контролем над базовым слоем. Чтобы достичь контроля над базовым слоем, Java нужна некоторая помощь от других языков. Это роль нативного.
Java не идеальна. В дополнение к тому факту, что он намного медленнее, чем традиционный C ++ с точки зрения скорости работы, Java не может напрямую получить доступ к базовой операционной системе (например, системное оборудование и т. Д.). По этой причине Java использует нативные методы для расширения функций программ Java.
Нативный метод можно сравнить с интерфейсом между программами Java и программами C, и его шаги внедрения:
1. Объявите метод Native () в Java, а затем компилируется;
2. Используйте Javah для генерации файла .h;
3. Напишите файл .cpp для реализации нативного метода экспорта, который должен включить файл .h, сгенерированный на втором этапе (обратите внимание, что он также содержит файл jni.h с JDK);
4. Скомпилируйте файл .cpp на третьем шаге в файл библиотеки динамических ссылок;
5. Используйте метод System.LoadLibrary () для загрузки файла библиотеки динамических ссылок, сгенерированного на шаге 4 в Java. Этот метод Native () можно получить на Java.
Ситуация, когда применяется местный метод Java
1. Чтобы использовать функцию базовой платформы хоста, эта функция не может быть доступна через Java API.
2. Чтобы получить доступ к старой системе или использовать существующую библиотеку, эта система или библиотека не записана на Java
3. Чтобы ускорить производительность программы, период конфиденциального кода реализуется в качестве локального метода.
Вышеупомянутая статья полностью понимает роль нативных ключевых слов в Java - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.