JavaRush /Kurslar /All lectures for UZ purposes /Obyektlar va Konstruktorlar

Obyektlar va Konstruktorlar

All lectures for UZ purposes
Daraja, Dars
Mavjud

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 o = new Object();
Object turidagi obyekt yaratish
Cat pet = new Cat();
Cat turidagi obyekt yaratish
Scanner console = new Scanner(System.in)
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
BufferedReader bufferedReader = new BufferedReader( reader );
Cat cat = new Cat();
PersonInfo personInfo = new PersonInfo()

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
public class Point
{
   public int x;
   public int y;

   Point(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
}
Sinf Point




Sinfning konstruktori Point
public class Solution
{
   public static void main(String[] args)
   {
      Point point = new Point(5, 10);
   }
}




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:

class Cat
{
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
}
Cat cat = new Cat("Vaska", 2);
Bu mumkin
Cat cat = new Cat("Vaska");
Bu mumkin emas. Kod kompilyatsiyadan o'tmaydi.
Cat cat = new Cat();
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
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
   public Cat(String name)
   {
      this.name = name;
      this.age = UNKNOWN; // noma'lum
   }
}
Cat cat = new Cat("Vaska", 2);
Bu mumkin: birinchi konstruktor chaqiriladi
Cat cat = new Cat("Vaska");
Bu mumkin: ikkinchi konstruktor chaqiriladi
Cat cat = new Cat();
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
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }

   public Cat()
   {
      this.name = "Bezimli";
      this.age = UNKNOWN; // noma'lum
   }
}
Cat cat = new Cat("Vaska", 2);
Bu mumkin: birinchi konstruktor chaqiriladi
Cat cat = new Cat();
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
class Cat
{
   public String name;
   public int age;
}
Cat cat = new Cat();
Bu mumkin: sukutdagi konstruktor chaqiriladi

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION