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:

Memuat kelas ke dalam memori

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
Class a = String.class;
Dapatkan Classobjek dengan informasi tentang Stringkelas
Class b = Object.class;
Dapatkan Classobjek dengan informasi tentang Objectkelas
Class c = Integer.class;
Dapatkan Classobjek dengan informasi tentang Integerkelas
Class d = int.class;
Dapatkan Classobjek dengan informasi tentang intjenisnya
Class e = void.class;
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
Class a = "Hello".getClass();
Objek yang sama denganString.class
Class b = new Integer().getClass();
Objek yang sama denganInteger.class
Class c = Boolean.TRUE.getClass();
Objek yang sama denganBoolean.class