Kaedah getClass(), objek Kelas, dan pengenalan kepada Refleksi - 1

"Hai, Amigo!"

"Sekarang tiba masanya untuk acara utama. Kita akan berkenalan dengan kelas Kelas dan menyentuh Refleksi.
Seperti yang anda mungkin sudah sedar, segala-galanya di Jawa adalah objek. Dan apakah yang diperlukan oleh objek? Apakah yang ditakrifkan oleh setiap objek. apa itu semua?"

"Kelas!"

"Betul! Syabas. Setiap objek mempunyai kelas. Tetapi kembali kepada objek... Sesetengah objek mengandungi entiti sepenuhnya, manakala yang lain hanya membantu menguruskannya."

"Jenis terakhir ini termasuk FileOutputStream dan Thread . Apabila anda mencipta objek Thread , thread baharu tidak dibuat. Thread dibuat oleh mesin maya Java selepas kaedah start() dipanggil. Objek ini hanya membantu menguruskan proses."

"Sama dengan FileOutputStream : fail disimpan pada cakera, dan OS menguruskan storan dan akses. Tetapi kita boleh berinteraksi dengannya melalui objek Fail, sekali lagi dengan bantuan mesin maya Java."

"Ya, saya sudah faham."

"Jadi, ada kelas khas yang dipanggil Kelas untuk berinteraksi dengan kelas."

"Itu tidak sukar untuk diteka."

"Ya. Setiap kali mesin maya Java memuatkan kelas baharu ke dalam memori, ia mencipta objek Kelas, yang boleh anda gunakan untuk mendapatkan maklumat khusus tentang kelas yang dimuatkan."

"Setiap kelas dan objek dikaitkan dengan « Objek kelas »."

Contoh Penerangan
Class clazz = Integer.class;
Mendapat objek Kelas kelas Integer.
Class clazz = int.class;
Mendapat objek Kelas int kelas.
Class clazz = "123".getClass();
Mendapat objek Kelas objek String.
Class clazz = new Object().getClass();
Mendapat objek Kelas objek Objek.

"Wah! Menariknya!"

"Adakah anda ingat bahawa kelas perkataan ialah kata kunci dalam Java dan tidak boleh digunakan sebagai nama pembolehubah?"

"Oh ya, saya tahu, saya tahu. Saya lupa."

"Adakah anda sudah menggunakan objek Kelas di suatu tempat?"

"Ya, kami menggunakannya apabila kami menulis pelaksanaan kaedah equals kami sendiri."

"Ya, anda boleh menggunakan kaedah getClass() untuk menguji sama ada objek mempunyai kelas yang sama."

"Dan apa yang boleh anda lakukan dengan objek ini?"

"Banyak perkara:"

kod Java Penerangan
Class s = int.class;
String name = s.getName();
Mendapat nama kelas.
Class s = Class.forName("java.lang.String");
Mendapat kelas mengikut nama.
Object o1 = String.valueOf(1);
Object o2 = 123 + "T";
o1.getClass() == o2.getClass();
Membandingkan kelas objek.

"Menarik, tetapi tidak sekeren yang saya fikirkan."

"Anda mahu ia menjadi sejuk? Terdapat juga ReflectionReflection adalah super cool."

"Apa itu Refleksi ?"

" Refleksi ialah keupayaan kelas untuk mendapatkan maklumat tentang dirinya. Java mempunyai kelas khas:  Medan dan Kaedah , yang serupa dengan kelas Kelas untuk kelas. Sama seperti objek Kelas membenarkan anda mendapatkan maklumat tentang kelas, objek Medan menyediakan maklumat tentang medan , dan objek Kaedah menyediakan maklumat tentang kaedah. Dan lihat apa yang boleh anda lakukan dengannya:"

kod Java Penerangan
Class[] interfaces = List.class.getInterfaces();
Mendapat senarai objek Kelas untuk antara muka kelas Senarai
Class parent = String.class.getSuperclass();
Mendapat objek Kelas bagi kelas induk kelas String
Method[] methods = List.class.getMethods();
Mendapat senarai kaedah kelas Senarai
String s = String.class.newInstance();
Mencipta String baharu
String s = String.class.newInstance();
Method m = String.class.getMethod("length");
int length = (int) m.invoke(s)
Mendapat kaedah panjang kelas String dan memanggilnya pada String s

"Wah! Sekarang memang hebat!"