— Salom, Amigo!
Endi eng qiziq joyiga kelamiz. Class klassi va biroz Reflection bilan tanishamiz.
Sen allaqachon bilib olgan bo'lsang kerak, Java-da hamma narsa obyekt. Obyekt uchun nima kerak? Har qanday obyektda nima bo'ladi va uning mohiyatini belgilaydi?
— Ob’ekt klassi!
— To‘g‘ri! Yaxshi. Har bir obyektning klassi bor. Lekin qaytadan obyektlarga qaytaylik. Ba'zi obyektlar to'liq biror narsa o'z ichiga oladi, boshqalari esa shunchaki yordam beradi.
Ikkinchisiga FileOutputStream yoki Thread kiradi. Agar sen Thread obyektini yaratsang, yangi ip yaratilmidi. Uni Java-mashina start() metodini chaqirgandan keyin yaratadi. Bu obyekt jarayonni boshqarishga yordam beradi holos.
Xuddi shu tarzda FileOutputStream: fayl diskda saqlanadi va uning saqlanishi va unga kirishni OS boshqaradi. Ammo biz File tipidagi obyektlar yordamida u bilan o'zaro munosabatda bo'lishimiz mumkin, yana Java-mashina yordamida.
— Ha, buni bilib oldim.
— Shunday qilib, sinflar bilan o'zaro munosabat qilish uchun maxsus class mavjud va u — Class deb ataladi.
— Taxmin qilish qiyin emas edi.
— Ha. Har safar Java-mashina yangi classni xotiraga yuklaganda, u yuklangan class haqida ma'lumot olish imkonini beradigan Class tipidagi obyekt yaratadi.
Har bir klass va obyektga shunday «klass obyekti» bog'langan.
| Misol | Tavsif |
|---|---|
|
Integer klassidan «klass obyekti» olish. |
|
int klassidan «klass obyekti» olish. |
|
String turidagi obyektdan «klass obyekti» olish. |
|
Object turidagi obyektdan «klass obyekti» olish. |
— Wow, qiziqarli ekan.
Nega clazz deb yozyapsan, class emas?
— Eslaysanmi, class so'zi Java’da kalit so‘z va uni o'zgaruvchilar nomlashda ishlatish mumkin emas?
— Ha, bilaman, bilaman. Faqat esdan chiqibdi.
— Sen hech qayerda Class obyektini ishlatganmisan?
— Ha, biz uni equals metodining o'z versiyasini yozganimizda ishlatgandik.
— Ha, getClass() metodidan foydalansang, obyektlarning klasslari bir xilmi, yo'qmi solishtirish mumkin.
— Bu obyekt bilan nima qilish mumkin?
— Hm, ko'p narsalar:
| Java kod | Tavsif |
|---|---|
|
Klass nomini olish. |
|
Nom bo'yicha klass olish. |
|
Obyektlarning klasslarini solishtirish. |
— Qiziqarli, lekin men o'ylagandek qiziq emas.
— Daha qiziqarli bo‘lishini xohlaysanmi? Yana Reflection bor. Reflection – bu juda qiziqarli.
— Reflection nima?
— Reflection - bu klassning o'zi haqida ma'lumot olish qobiliyati. Java’da maxsus sinflar mavjud: Field – maydon, Method – metod, xuddi klasslar uchun Class singari. Chunki, Class tipidagi obyekt klass haqida ma'lumot olish imkonini beradi, shuning uchun Field-tipidagi obyekt «klass maydoni» haqida bilgilar berishi mumkin. Method esa «klass metodi» haqida ma'lumot berishi mumkin. Ular bilan nima qilish mumkinligi esa:
| Java kod | Tavsif |
|---|---|
|
List klassidagi interfeyslarga «klass obyektlari» ro'yxatini olish. |
|
String klassining ota klassi uchun «klass obyekti» olish. |
|
List klassida mavjud metodlar ro'yxatini olish. |
|
String klassidan yangi obyekt yaratish. |
|
String klassidan length metodini olib, s satriga chaqirish. |
— Wow! Bu haqiqatan ham qiziqarli!
— Sen yoqtirganingdan xursandman.
GO TO FULL VERSION