في المرة الأولى التي التقيت فيها Native هي طريقة HashCode في رمز المصدر java.lang.object:
Hashcode الأصلي العام () ؛
لماذا يوجد مواطن؟ هذا ما أريد أن أتعلمه. لذلك أريد تلخيص مواطن أدناه.
1. فهم مواطن ، أي ، Jni ، Java Interface Native
من المأمول أن تكون جميع اللغات نقية. على سبيل المثال ، إذا كنت ترغب في حل حل معين ، فما عليك سوى كتابته في هذه اللغة. يحتوي منصة Java على واجهة برمجة تطبيقات للمستخدمين للتبديل مع رمز C المحلي ، يسمى Java Native Interface (Java Local Interface).
2. اتصل بـ C "Hello ، Jni" في Java
نحتاج إلى اتباع الخطوات المريحة للخروج من العمل:
1. قم بإنشاء فئة Java التي تحتوي على طريقة أصلية وطريقة مكتبة التحميل في مكتبة التحميل. Hellonative.Java Code كما يلي:
الطبقة العامة Hellonative {static {system.loadLibrary ("Hellonative") ؛ } الفراغ الأصلي الثابت العام sealhello () ؛ suppressWarnings ("static-access") public static void main (string [] args) {new Hellonative (). sayhello () ؛ }}أول شيء يجب ملاحظته هو الطريقة الأصلية ، كما تعمل مكتبة التحميل لاحقًا. تخبر الكلمة الرئيسية الأصلية المترجم (في الواقع JVM) بأن الطريقة يتم تعريفها خارجيًا ، وهنا تشير إلى C. إذا قمت بتشغيل هذا الرمز مباشرة ، فسيخبرك JVM: "لقد حدث استثناء Java." إخراج وحدة التحكم على النحو التالي:
استثناء في الموضوع "الرئيسي" java.lang.unsatisfiedlinkerror: لا يوجد هيلونتراك في java.library.path في java.lang.classloader.loadlibrary (مصدر غير معروف) على java.lang.runtime.loadlibrary0 (مصدر غير معروف) في java.lang.system.loadlibrary Hellonative. <Clinit> (Hellonative.java:5)
هذا هو عندما يستخدمه البرنامج ، يقول الجهاز الظاهري إنه لا يعرف كيفية العثور على Sayhello. يمكنك كتابتها يدويًا أدناه ، لذلك من الطبيعي أن تستخدم Mason
2. قم بتشغيل Javah للحصول على ملف رأس الإعلان C يحتوي على method.h
ضع hellonative.java ، ببساطة Javac Javah ، كما هو موضح في الشكل
حصلت على ملف Hellonative.h التالي:
/ * لا تقم بتحرير هذا الملف - تم إنشاؤه الجهاز */#تضمين <jni.h>/ * header للفئة hellonative */#ifndef _included_hellonative#define _included_hellonative#ifdef __cpluspluseer JNICALL JAVA_HELLONITARY_SAYHELLO (JNIENV *، JCLASS) ؛ #ifdef __cplusplus}#endif#endif
Jni.h هذا الملف ، في /٪ java_home ٪ تشمل
3. اكتب C لتنفيذ الأساليب المحلية وفقًا لملف الرأس.
نحن هنا ببساطة ننفذ طريقة Sayhello على النحو التالي:
#include "hellonative.h" #include <stdio.h> jniexport void jnicall java_hellonative_sayhello {printf ("hello ، jni") ؛ }4. قم بإنشاء مكتبة DLL المشتركة ، ثم قم بتحميل برنامج 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" -sed -o hellonative.dll.
-M64 يعني أن مكتبة DLL التي تم إنشاؤها هي 64 بت. ثم قم بتشغيل Hellonative:
جافا هيلون
أخيرًا ، أستطيع أن أرى أن وحدة التحكم تطرح على النحو التالي:
مرحبا ، جني
3. JNI CALL C RID CHART
4. مقدمات أخرى
يتم استخدام الأم عندما يتم تطويره مع C ++! لا تحتاج إلى تطوير جافا بنفسك!
استخدم الكلمات الرئيسية الأصلية للإشارة إلى أن هذه الطريقة هي وظيفة أصلية ، أي أن هذه الطريقة يتم تنفيذها بلغة C/C ++ ، ويتم تجميعها في DLL ويسمى Java.
لا يتم تضمين هيئات تنفيذ هذه الوظائف في الكود المصدري لـ JDK ، ويجب ألا تراها. كما أنها مختلفة للمنصات المختلفة. هذه هي أيضا الآلية الأساسية لجاوة. في الواقع ، تستدعي Java أساليب أصلية مختلفة على منصات مختلفة لتحقيق الوصول إلى نظام التشغيل.
1. يتم استخدام الأصلي للتعاون مع لغات أخرى (مثل C ++) ، أي تنفيذ الوظائف الأصلية غير مكتوب في Java.
2. بما أن أيا من جافا ، لا تقلق بشأن رمز المصدر ، هاها
يعني إخطار نظام التشغيل.
يجب عليك تنفيذ هذه الوظيفة لي لأنني أريد استخدامها.
لذلك ، يتم تنفيذ وظائف الكلمات الرئيسية الأصلية بواسطة نظام التشغيل ، ويمكن استدعاء Java فقط.
جافا هي لغة منصة. نظرًا لأنه منصة ، فإن السعر المدفوع هو التضحية ببعض السيطرة على الطبقة الأساسية. لتحقيق السيطرة على الطبقة الأساسية ، تحتاج Java إلى بعض المساعدة من اللغات الأخرى. هذا هو دور الأم.
جافا ليست مثالية. بالإضافة إلى حقيقة أنه أبطأ بكثير من C ++ التقليدية من حيث سرعة التشغيل ، لا يمكن لـ Java الوصول مباشرة إلى نظام التشغيل الأساسي (مثل أجهزة النظام ، إلخ). لهذا السبب ، تستخدم Java الطرق الأصلية لتوسيع وظائف برامج Java.
يمكن مقارنة الطريقة الأصلية بالواجهة بين برامج Java وبرامج C ، وخطوات تنفيذها هي:
1. إعلان الطريقة الأصلية () في جافا ثم ترجمة ؛
2. استخدم Javah لإنشاء ملف .h ؛
3. اكتب ملف .cpp لتنفيذ طريقة التصدير الأصلية ، والتي تحتاج إلى تضمين ملف .h الذي تم إنشاؤه في الخطوة الثانية (لاحظ أنه يحتوي أيضًا على ملف JNI.H مع JDK) ؛
4. تجميع ملف .cpp في الخطوة الثالثة في ملف مكتبة الارتباط الديناميكي ؛
5. استخدم طريقة System.LoadLibrary () لتحميل ملف مكتبة الارتباط الديناميكي الذي تم إنشاؤه في الخطوة 4 في Java. يمكن الوصول إلى هذه الطريقة الأصلية في جافا.
الوضع الذي تنطبق فيه طريقة جافا المحلية
1. من أجل استخدام ميزة منصة المضيف الأساسية ، لا يمكن الوصول إلى هذه الميزة من خلال Java API.
2. من أجل الوصول إلى نظام قديم أو استخدام مكتبة موجودة ، لا يتم كتابة هذا النظام أو المكتبة في Java
3. من أجل تسريع أداء البرنامج ، يتم تنفيذ فترة من التعليمات البرمجية الحساسة كطريقة محلية.
إن المقالة أعلاه تتفهم بشكل شامل دور الكلمات الرئيسية الأصلية في Java هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.