Kami telah bercakap tentang fakta bahawa kelas adalah jenis data yang kompleks. Sekarang mari kita bercakap sedikit tentang bahagian lain kelas — cara kelas dikendalikan oleh mesin Java. Ingat bahawa dalam Java semuanya adalah objek, walaupun kelas. Kelas ialah objek. Adakah itu mengejutkan anda? Kemudian mari kita teruskan.

Memuatkan kelas ke dalam ingatan

Sebenarnya, apabila kelas dimuatkan ke dalam ingatan, tiga "objek" khas dicipta:

Memuatkan kelas ke dalam ingatan

Penerangan ringkas ilustrasi:

segi empat tepat kuning:

Fail kod disimpan pada cakera sebagai fail dengan sambungan ".class". Ia mengandungi maklumat tentang kelas, medan dan kaedahnya, serta kod sumber kaedah yang disusun menjadi kod bait.

segi empat tepat jingga:

Apabila mesin Java memuatkan kelas ke dalam memori, ia menyusun kod bait ke dalam kod mesin khusus untuk pemproses dan sistem pengendalian komputer. Hanya mesin Java yang mempunyai akses kepada kod mesin ini. Sebagai pengaturcara Java, kami tidak mempunyai akses kepadanya.

segi empat tepat hijau:

Mesin Java mencipta objek yang mengandungi semua pembolehubah statik dan kaedah kelas. Anda mengakses "objek" ini menggunakan nama kelas.

Sebagai contoh, apabila anda menulis , anda merujuk kepada pembolehubah statik yang terletak di dalam kelas. Objek ini ialah segi empat tepat hijau kami. Dan di situlah pembolehubah statik disimpan.java.lang.Math.PIPIjava.lang.Mathjava.lang.MathPI

segi empat tepat biru:

Apabila mesin Java memuatkan kod kelas ke dalam ingatan, ia mencipta java.lang.Classobjek khas, yang menyimpan maklumat tentang kelas yang dimuatkan: namanya, nama kaedah, nama medan dan jenis, dsb.

Nama "Kelas" boleh mengelirukan sedikit. Lebih masuk akal untuk memanggilnya ClassInfo, kerana kelas ini hanya menyimpan beberapa maklumat tentang kelas yang dimuatkan.

Anda boleh mendapatkan objek Kelas untuk sebarang jenis menggunakan arahan seperti ini:

Class name = ClassName.class;

Contoh:

Kod Catatan
Class a = String.class;
Dapatkan Classobjek dengan maklumat tentang Stringkelas
Class b = Object.class;
Dapatkan Classobjek dengan maklumat tentang Objectkelas
Class c = Integer.class;
Dapatkan Classobjek dengan maklumat tentang Integerkelas
Class d = int.class;
Dapatkan Classobjek dengan maklumat tentang intjenis
Class e = void.class;
Dapatkan Classobjek dengan maklumat tentang voidjenis

Anda juga boleh mendapatkan rujukan kepada objek penerangan kelas daripada sebarang objek, kerana setiap objek mempunyai kaedah getClass(), yang diwarisi daripada Objectkelas.

Contoh:

Kod Catatan
Class a = "Hello".getClass();
Objek yang sama sepertiString.class
Class b = new Integer().getClass();
Objek yang sama sepertiInteger.class
Class c = Boolean.TRUE.getClass();
Objek yang sama sepertiBoolean.class