Bahasa Java mendefinisikan tipe data yang berbeda, seperti tipe dasar int, ganda, dll., Serta objek kelas induk dari semua kelas, dll. Ini adalah tipe tingkat Java, dan proses pemrosesan menggunakan metode lokal memerlukan tipe yang sesuai.
Metode asli yang ditulis dalam lapisan java dikompilasi ke dalam bytecode oleh kompiler. Bytecode akan merekam berbagai jenis parameter ke dalam file kelas sesuai dengan spesifikasi, seperti B mewakili byte, saya mewakili int, j mewakili panjang, dll. Kemudian metode lokal sebagai berikut direkam sebagai (ljava/lang/objek; ii) v.
tes void asli statis publik (objek o, int i, int i2);
Metode yang sesuai di atas terdaftar di JVM. Ketika dieksekusi untuk memanggil metode lokal, tipe data lokal akan dikonversi sesuai dengan peta jenis, seperti int-> jint dan objek-> Jobject. Bahkan, int dan jint adalah sama di C ++, cukup gunakan Typedef untuk mendefinisikan nama lain. Jobject adalah penunjuk. Mesin eksekusi menghasilkan objek objek saat menjalankan logika lapisan Java. Ini memiliki struktur data khusus di lapisan JVM. Jobject di sini adalah pointer untuk struktur ini. Ketika perlu digunakan, itu dapat dilemparkan ke dalam struktur data lapisan JVM, dan kemudian dapat dioperasikan. Selain itu, OOP digunakan dalam JVM untuk mewakili pointer objek.
| Tipe Java | Tipe asli | nilai |
|---|---|---|
| Boolean | jboolean | benar atau salah |
| byte | jbyte | -128 ~ 127 |
| Pendek | jshort | -Pow (2,15) ~ POW (2,15) -1 |
| int | Jint | -Pow (2,31) ~ POW (2,31) -1 |
| panjang | jlong | -Pow (2,63) ~ POW (2,63) -1 |
| mengambang | jfloat | IEEE754 Nomor Titik Mengambang Presisi Tunggal Standar |
| dobel | jdouble | IEEE754 Nomor Titik Mengambang Presisi Ganda Standar |
| arang | jchar | Karakter Unicode 16-bit yang tidak ditandatangani |
Selain pemetaan tipe dasar, tipe objek lain di lapisan java adalah tipe referensi, sehingga metode lokal sesuai dengan tipe jobject. Selain itu, itu juga akan memperoleh beberapa subclass yang umum digunakan, seperti JString, JClass, dll., Sebagai berikut,
class _jObject {}; class _jclass: public _jObject {}; class _jthrowable: public _jObject {}; class _jString: public _jObject {}; class _jrray: public _jObject {oD; class {}; class _jray: public _jObject {oL {class {class {class {class {class {class {class {class {class {class; _jarray {}; class _jchararray: public _jarray {}; class _jshortArray: public _jarray {}; class _jintarray: public _jarray {}; class _jlongarray: public _jarray {{{{{class _jfloOry _jfloUray _JoUray _jarray {{{{{{{class; : public _jarray {}; class _jobjectArray: public _jarray {};Anda dapat melihat bahwa kelas _JObject didefinisikan, yang merupakan kelas kosong, sedangkan kelas lain termasuk _jclass _jthrowable _JString _jarray, semuanya diwarisi dari kelas _JObject. Selain itu, tipe array juga memperoleh 9 subclass, sesuai dengan array tipe dasar dan array tipe referensi masing -masing.
Setelah mendefinisikan kelas, tentukan alias pointer. Berikut adalah jenis metode lokal. Selain itu, ini adalah definisi C ++. Jika itu adalah kompiler C, ia akan menggunakan struct untuk mendefinisikan _jObject, bukan kelas.
typedef _jObject *jobject; typedef _jclass *jclass; typedef _jthrowable *jthrowable; typedef _jString *jString; typedef _jarray *jrray; typedef _jboolearray *jbooleanarray; typedef _jbytearray *jboolearray; typedef _jbytearray *jboolearray; typedef _jbytearray *jboolearray; typedef _jbytearray; *JCharArray; typedef _jshortarray *jshortarray; typedef _jintarray *jintarray; typedef _jlongarray *jlongarray; typedef _jfloatarray *jfloatarray; typedef _jdoubleArray *jdoublearray; typedef _jdoubleArray *jdoublearray; typedef _jdoubleArray *jdoublearray;
Jenis referensi di atas didefinisikan sebagai kelas kosong. Di sini kami memahami kelas kosong di C ++. Biasanya, kita perlu mendefinisikan kelas kosong dengan dua cara berikut.
kelas kosong {} struct kosong {}Setelah definisi di atas, ukuran kelas kosong adalah 1, tetapi apa gunanya kelas kosong jika tidak ada? Bahkan, ini dapat digunakan untuk membedakan berbagai objek. Objek yang berbeda yang ditentukan oleh kelas kosong memiliki alamat yang berbeda. Objek yang dioperasikan menggunakan yang baru juga memiliki pointer yang berbeda. Selain itu, kelas kosong juga dapat membedakan berbagai kategori.
Jadi bagaimana kita menggunakan pemetaan jenis ini dalam hubungannya? Ini sebenarnya sangat sederhana. Jawabannya adalah mengonversi pointer. Seperti disebutkan sebelumnya, objek di lapisan Java memiliki struktur data tertentu dalam JVM, yaitu, gunakan OOP untuk mewakili pointer objek. Kemudian pekerjaan dapat dikonversi sebagai berikut, di mana pegangan adalah jenis pekerjaan.
oop hasil = *reinterpret_cast <oop *> (handle);
Sangat nyaman untuk memprosesnya lebih lanjut setelah mengubahnya menjadi OOP. Misalnya, jika Anda ingin mendapatkan beberapa metadata terkait kelas, Anda dapat menggunakan Klass untuk mendapatkannya.
Di atas, tipe yang ditentukan oleh lapisan Java memiliki tipe data yang sesuai dalam metode lokal. Selain itu, kode sumber lapisan java dikompilasi ke dalam bytecode dan menyimpan jenis yang sesuai dengan parameter metode lokal. Saat mengeksekusi JVM, jenis yang sesuai dengan metode lokal dapat dikonversi sesuai dengan berbagai jenis. Jenis yang ditentukan oleh metode lokal semuanya adalah kelas kosong. Fungsi utama adalah mengikat objek dan membedakan tipe objek. Objek atau metadata kelas dapat diakses melalui konversi pointer bila perlu.