Pertama kali saya bertemu asli adalah metode kode hash dalam java.lang.Object Source Code:
hashcode int asli int ();
Mengapa ada penduduk asli? Inilah yang ingin saya pelajari. Jadi saya ingin merangkum asli di bawah ini.
1. Memahami Asli, yaitu, JNI, Java Native Interface
Semua bahasa diharapkan murni. Misalnya, jika Anda ingin menyelesaikan solusi tertentu, tulis saja dalam bahasa ini. Platform Java memiliki API bagi pengguna untuk beroperasi dengan kode C lokal, yang disebut Java Native Interface (Java Local Interface).
2. Hubungi C "Halo, JNI" di Java
Kita perlu mengikuti langkah -langkah yang nyaman untuk pulang kerja:
1. Buat kelas Java yang berisi metode asli dan metode pemuatan perpustakaan beban. Hellonative.java Code adalah sebagai berikut:
kelas publik Hellonative {static {System.LoadLibrary ("Hellonative"); } public static native void wayshello (); @SuppressWarnings ("Static-Access") Public Static Void Main (String [] args) {new Hellonative (). Sayhello (); }}Hal pertama yang perlu diperhatikan adalah metode asli, dan perpustakaan pemuatan juga berfungsi nanti. Kata kunci asli memberi tahu kompiler (sebenarnya JVM) bahwa metode ini didefinisikan secara eksternal, dan di sini mengacu pada C. Jika Anda menjalankan kode ini secara langsung, JVM akan memberi tahu Anda: "Pengecualian Java telah terjadi." Output konsol adalah sebagai berikut:
Pengecualian di Thread "Main" java.lang.unsatistipiedlinkerror: tidak ada hellonative di java.library.path di java.lang.classloader.loadlibrary (sumber yang tidak diketahui) di java.lang.runtime.loadlibrary0 (sumber yang tidak diketahui) di java.Lang.sy. Hellonative. <liniit> (hellonative.java:5)
Inilah saat program menggunakannya, mesin virtual mengatakan tidak tahu bagaimana menemukan Sayhello. Anda dapat menulisnya secara manual di bawah ini, jadi wajar bagi Mason untuk digunakan
2. Jalankan Javah untuk mendapatkan file header deklarasi C yang berisi metode ini
Letakkan hellonative.java, hanya Javac Javah, seperti yang ditunjukkan pada gambar
Saya mendapat file hellonative.h berikut:
/ * Jangan mengedit file ini - mesin ini dihasilkan */#termasuk <jni.h>/ * header untuk kelas Hellonative */#ifndef _included_hellonative#define _includeded_hellonative#ifdef __cplusex "c" {#endif/ * class: Hellon: Hellon: Hellon: Hellon: Hellon: Hellon: Hellon. Jnicall java_hellonative_sayhello (jnienv *, jclass); #ifdef __cplusplus}#endif#endifjni.h file ini, di /%java_home%termasuk
3. Tulis C untuk mengimplementasikan metode lokal sesuai dengan file header.
Di sini kami cukup mengimplementasikan metode Sayhello ini sebagai berikut:
#include "hellonative.h" #include <stdio.h> jniexport void jnicall java_hellonative_sayhello {printf ("halo, jni"); }4. Hasilkan perpustakaan bersama DLL, lalu muat program Java dan sebut saja.
Di Windows, Mingw GCC berjalan sebagai berikut
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 HelloNative.dll HelloNative.c
-M64 berarti bahwa perpustakaan DLL yang dihasilkan adalah 64-bit. Kemudian jalankan Hellonative:
Java Hellonative
Akhirnya, saya dapat melihat bahwa konsol mencetak sebagai berikut:
Halo, jni
3. JNI Call C Chart Flow
4. Perkenalan lainnya
Asli digunakan ketika dikembangkan bersama dengan C ++! Anda tidak perlu mengembangkan Java sendiri!
Gunakan kata kunci asli untuk menunjukkan bahwa metode ini adalah fungsi asli, yaitu, metode ini diimplementasikan dalam bahasa C/C ++, dan dikompilasi ke dalam DLL dan dipanggil oleh Java.
Badan implementasi fungsi -fungsi ini tidak termasuk dalam kode sumber JDK, dan Anda tidak boleh melihatnya. Mereka juga berbeda untuk platform yang berbeda. Ini juga merupakan mekanisme Java yang mendasari. Faktanya, Java memanggil metode asli yang berbeda pada platform yang berbeda untuk mencapai akses ke sistem operasi.
1. Asli digunakan untuk berkolaborasi dengan bahasa lain (seperti C ++) yaitu, implementasi fungsi asli tidak ditulis dalam Java.
2. Karena tidak ada java, jangan khawatir tentang kode sumbernya, haha
Asli berarti memberi tahu sistem operasi.
Anda harus menerapkan fungsi ini untuk saya karena saya ingin menggunakannya.
Oleh karena itu, fungsi kata kunci asli diimplementasikan oleh sistem operasi, dan Java hanya dapat dipanggil.
Java adalah bahasa lintas platform. Karena itu adalah cross-platform, harga yang dibayarkan adalah untuk mengorbankan kontrol atas lapisan yang mendasarinya. Untuk mencapai kontrol atas lapisan yang mendasarinya, Java membutuhkan bantuan dari bahasa lain. Ini adalah peran asli.
Java tidak sempurna. Selain fakta bahwa itu jauh lebih lambat daripada C ++ tradisional dalam hal kecepatan berjalan, Java tidak dapat secara langsung mengakses sistem operasi yang mendasarinya (seperti perangkat keras sistem, dll.). Untuk alasan ini, Java menggunakan metode asli untuk memperluas fungsi program Java.
Metode asli dapat dibandingkan dengan antarmuka antara program Java dan program C, dan langkah implementasinya adalah:
1. Deklarasikan metode asli () di java dan kemudian dikompilasi;
2. Gunakan Javah untuk menghasilkan file .h;
3. Tulis file .cpp untuk mengimplementasikan metode ekspor asli, yang perlu menyertakan file .h yang dihasilkan pada langkah kedua (perhatikan bahwa itu juga berisi file JNI.H dengan JDK);
4. Kompilasi file .cpp pada langkah ketiga ke dalam file pustaka tautan dinamis;
5. Gunakan metode System.LoadLibrary () untuk memuat file pustaka tautan dinamis yang dihasilkan pada langkah 4 di java. Metode asli () ini dapat diakses di Java.
Situasi di mana metode java lokal berlaku
1. Untuk menggunakan fitur platform host yang mendasarinya, fitur ini tidak dapat diakses melalui Java API.
2. Untuk mengakses sistem lama atau menggunakan perpustakaan yang ada, sistem atau perpustakaan ini tidak ditulis dalam java
3. Untuk mempercepat kinerja program, periode kode sensitif diimplementasikan sebagai metode lokal.
Artikel di atas secara komprehensif memahami peran kata kunci asli di Java adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.