1. Obyekt yaratish
Mana, biz obyektlar yaratishga yetib keldik. Bu mavzu bilan avval ham tanish bo'lgansiz, faqat hozir biz bu mavzuni batafsil ko'rib chiqamiz. Aslida, obyektlar yaratish juda oson.
Obyekt yaratish uchun new operatoridan foydalanish kerak. Obyekt yaratish quyidagicha ko'rinadi:
new Klass(parametrlar)
Ko'pincha, obyektni yaratgan zahoti, unga havolani o'sha obyekt bilan bir xil turdagi o'zgaruvchiga saqlaymiz. Shuning uchun odatda obyekt yaratish kodi quyidagicha ko'rinadi:
Klass nomi = new Klass(parametrlar)
Bu erda Klass nomi — yangi o'zgaruvchi yaratish, tenglik belgisi o'ng tomonidagi kod esa Klass turidagi yangi obyekt yaratishdir.
Misollar:
| Kod | Izoh |
|---|---|
|
Object turidagi obyekt yaratish |
|
Cat turidagi obyekt yaratish |
|
Scanner turidagi obyekt yaratish |
Ko'pincha dasturchilar o'zgaruvchilarni sinflarning ismiga o'xshash qilib, faqat kichik harf bilan nomlaydilar. Yangi boshlovchi dasturchi bunday koddan chalg'ishi mumkin:
| Kod |
|---|
|
|
|
Aslida bu kodda hech qanday qo'rqinchli narsa yo'q — bu eng oddiy kod, unda o'zgaruvchi yaratiladi va darhol uning turi bilan bir xil obyekt bilan boshlanadi.
Tenglik belgisining chap tomonida — o'zgaruvchini yaratish. O'ng tomonida — obyektni yaratish. Bo'ldi.
2. Konstruktor
Siz ko'pincha obyekt yaratishda unga qandaydir parametrlar uzatilayotganini ko'rgansiz. Ayrim obyektlarga parametrlar uzatiladi, ba'zilariga esa — uzatilmaydi. Ushbu parametrlar bilan bog'liq barcha jarayon qanday ishlaydi?
Bu yerda hammasi oddiy: har bir sinfda obyekt yaratishda parametrlarni qayta ishlash uchun javob beradigan maxsus metodlar (yoki metodlar) mavjud. Bunday metodlar konstruktorlar deyiladi. Va bitta metod, mos ravishda, konstruktor.
Kodda konstruktor metodini oddiy metoddan ajratish qiyin emas. Bunday metodda ikkita xususiyat mavjud:
- konstruktor metodi nomi sinfining nomi bilan bir xil (va katta harf bilan boshlanadi)
- konstruktor metodi qaytariladigan natija turiga ega emas.
Umumiy ko'rinishi odatda quyidagicha:
modifikatorlar Klass(parametrlar)
{
kod
}
Misol:
| Kod | Izoh |
|---|---|
|
Sinf PointSinfning konstruktori Point |
|
Sinfning objekti Point yaratiladi, konstruktori chaqiriladi. |
Konstruktor metodining qanday ko'rinishda ekanligiga e'tibor bering: u natija turiga ega emas va uning nomi sinf nomi bilan bir xil.
Boshqa bir narsa: konstruktor ichidagi kodni ko'ring. Konstruktor parametrlarining nomlari sinfning maydonlari nomlari bilan bir xil – x, y. Bu standart amaliyot, o'zgaruvchi nomlarini o'ylab topmaslik uchun. Sinfning maydonlari bilan bir xil nomlar olinadi va nomlar konflikti this kalit so'zi yordamida hal qilinadi.
3. Konstruktor chaqiruvi
Yangi obyektni new operatori va «new Klass(parametrlar)» ko'rinishidagi buyruq yordamida yaratganingizda, ikki narsa sodir bo'ladi:
- Java-mashina Klass turidagi obyektni yaratadi
- Java-mashina obyektda konstruktorni chaqiradi va unga sizning parametrlaringizni uzatadi
Dasturchi sifatida siz o'zingiz hal qilasiz, qanday konstruktorlar bo'lishi kerak va bu konstruktorlar qanday parametrlar qabul qiladi.
Aytaylik, hayvonlar boshpanasida mushuklarni hisobga olish uchun sinf yaratishga qaror qildingiz. Unda sinf Cat quyidagicha ko'rinishda bo'lishi mumkin:
|
|
|
Bu mumkin |
|
Bu mumkin emas. Kod kompilyatsiyadan o'tmaydi. |
|
Bu ham mumkin emas. Kod kompilyatsiyadan o'tmaydi. |
Sinf Cat faqat bir konstruktor bilan parametrlar name va age mavjud. Boshqa konstruktorlar yo'q, shuning uchun obyekt yaratishda siz ism (name) va yoshni (age) parametr sifatida uzatishingiz kerak. Siz konstruktorni parametrlarini uzatmasdan qo'llay olmaysiz.
4. Bir nechta konstruktorlar
Agar kerak bo'lsa, siz sinfga bir nechta konstruktorlar qo'shishingiz mumkin. Konstruktorlar yoki ularning parametrlariga cheklov yo'q. Obyektni yaratishda kompilyator parametrlariga mos konstruktorni tanlaydi
| Kod | Izoh |
|---|---|
|
|
|
Bu mumkin: birinchi konstruktor chaqiriladi |
|
Bu mumkin: ikkinchi konstruktor chaqiriladi |
|
Bu mumkin emas. Kod kompilyatsiyadan o'tmaydi. |
Biz mushukning yoshining noma'lum bo'lishi mumkin bo'lgan holatni inobatga olishga qaror qildik. Bunday holat uchun kodga maxsus konstant UNKNOWN qo'shdik va faqat bitta parametrni — mushukning ismini qabul qiladigan konstruktor qo'shdik.
E'tibor bering, biz hali ham ikkala konstruktor ichida sinfning ikkala o'zgaruvchisini boshlaymiz. Noma'lum/yo'q parametrlarni UNKNOWN konstan bilan almashtiramiz.
Agar age o'zgaruvchisiga hech qanday qiymat tayinlanmasa, u sukutdan qiymatni == 0 saqlaydi. Va ko'chada topilgan mushukchaga juda yaxshi 0 to'liq yosh berilishi mumkin. Shuning uchun age o'zgaruvchisidagi nol har doim "noma'lum yosh"ni anglatmaydi.
5. Sukutdagi konstruktor
Agar sinfingizda ob'ektlar biror parametrsiz yaratilishini istasangiz, sinfda parametrsiz konstruktor e'lon qilish kerak.
Parametrsiz konstruktor — bu albatta kodsiz konstruktor emas, u sinfning o'zgaruvchilarini boshlang'ich qiymatlari bilan boshlaydigan kodni o'z ichiga olishi mumkin:
| Kod | Izoh |
|---|---|
|
|
|
Bu mumkin: birinchi konstruktor chaqiriladi |
|
Bu mumkin: ikkinchi konstruktor chaqiriladi |
Sukutdagi konstruktor
Bilinishi va eslab qolinishi zarur bo'lgan juda muhim jihat mavjud.
Agar sinfingizda umuman hech qanday konstruktor bo'lmasa, kompilyator sinfga sukutdagi konstruktor qo'shadi – parametrsiz va kodsiz, lekin public modifikatori bilan bo'ladi.
Agar sinfingizda kamida bitta konstruktor bo'lsa, sukutdagi konstruktor qo'shilmaydi – uni o'zingiz qo'shishingiz kerak bo'ladi.
| Kod | Izoh |
|---|---|
|
|
|
Bu mumkin: sukutdagi konstruktor chaqiriladi |
GO TO FULL VERSION