Kami telah berbicara tentang fakta bahwa kelas adalah tipe data yang kompleks. Sekarang mari kita bicara sedikit tentang sisi lain dari class — bagaimana class ditangani oleh mesin Java. Ingatlah bahwa di Jawa semuanya adalah objek, bahkan kelas. Kelas adalah objek. Apakah itu mengejutkan Anda? Lalu mari kita lanjutkan.
Memuat kelas ke dalam memori
Sebenarnya, ketika sebuah kelas dimuat ke dalam memori, tiga "objek" khusus dibuat:
Deskripsi singkat ilustrasi:
persegi panjang kuning:
File kode disimpan di disk sebagai file dengan ekstensi ".class". Ini berisi informasi tentang kelas, bidang dan metodenya, serta kode sumber metode yang dikompilasi menjadi bytecode.
persegi panjang oranye:
Saat mesin Java memuat kelas ke dalam memori, ia mengkompilasi bytecode menjadi kode mesin khusus untuk prosesor dan sistem operasi komputer. Hanya mesin Java yang memiliki akses ke kode mesin ini. Sebagai pemrogram Java, kami tidak memiliki akses ke sana.
persegi panjang hijau:
Mesin Java membuat objek yang berisi semua variabel statis dan metode kelas. Anda mengakses "objek" ini menggunakan nama kelas.
Misalnya, saat Anda menulis , Anda merujuk ke variabel statis yang terletak di kelas. Objek ini adalah persegi panjang hijau kita. Dan di situlah variabel statis disimpan.java.lang.Math.PIPIjava.lang.Mathjava.lang.MathPI
persegi panjang biru:
Ketika mesin Java memuat kode kelas ke dalam memori, ia membuat java.lang.Classobjek khusus, yang menyimpan informasi tentang kelas yang dimuat: namanya, nama metode, nama dan jenis bidang, dll.
Nama "Kelas" bisa sedikit membingungkan. Akan lebih masuk akal untuk menyebutnya ClassInfo, karena kelas ini hanya menyimpan beberapa informasi tentang kelas yang dimuat.
Anda bisa mendapatkan objek Kelas untuk semua jenis menggunakan perintah seperti ini:
Class name = ClassName.class;
Contoh:
| Kode | Catatan |
|---|---|
|
Dapatkan Classobjek dengan informasi tentang Stringkelas |
|
Dapatkan Classobjek dengan informasi tentang Objectkelas |
|
Dapatkan Classobjek dengan informasi tentang Integerkelas |
|
Dapatkan Classobjek dengan informasi tentang intjenisnya |
|
Dapatkan Classobjek dengan informasi tentang voidjenisnya |
Anda juga bisa mendapatkan referensi ke objek deskripsi kelas dari objek apa pun, karena setiap objek memiliki metode getClass()yang diwarisi dari Objectkelas.
Contoh:
| Kode | Catatan |
|---|---|
|
Objek yang sama denganString.class |
|
Objek yang sama denganInteger.class |
|
Objek yang sama denganBoolean.class |
GO TO FULL VERSION