11. Constructor

Oldingi bobda class va object bilan tanishdik.

Object yaratgandan keyin unga qiymat berishimiz mumkin edi:

Student talaba = new Student();

talaba.ism = "Ali";
talaba.yosh = 18;

Buni har safar alohida yozish o‘rniga constructor ishlatishimiz mumkin.

Constructor nima?

Constructor — object yaratilganda avtomatik ishlaydigan maxsus qism.

Masalan:

class Student {

    String ism;
    int yosh;

    Student() {
        System.out.println("Student yaratildi.");
    }
}

Object yaratamiz:

Student talaba = new Student();

Natija:

Student yaratildi.

new Student() bajarilganda constructor avtomatik chaqirildi.


Constructor qanday yoziladi?

Constructorning nomi class nomi bilan bir xil bo‘ladi.

Masalan:

class Car {

    Car() {
        System.out.println("Mashina yaratildi.");
    }
}

Bu yerda:

Car()

constructor hisoblanadi.

Muhim:

Constructor oldidan void, int yoki boshqa return type yozilmaydi.

Noto‘g‘ri:

void Car() {
}

To‘g‘ri:

Car() {
}

Constructor orqali qiymat berish

Constructorning eng foydali tomoni — object yaratilayotgan paytda qiymat berish.

Masalan:

class Student {

    String ism;
    int yosh;

    Student(String ism, int yosh) {
        this.ism = ism;
        this.yosh = yosh;
    }
}

Endi:

Student talaba = new Student("Ali", 18);

Object yaratilishi bilan:

ism = Ali
yosh = 18

bo‘ladi.


this nima?

Yuqoridagi kodda:

this.ism = ism;

ikki marta ism yozilgan.

Birinchi:

this.ism

classdagi field.

Ikkinchi:

ism

constructorga berilgan parametr.

Ya'ni:

this.ism = ism;

"Objectning ism qiymatiga berilgan ism qiymatini joylashtir" degan ma'noni anglatadi.


To‘liq misol

class Student {

    String ism;
    int yosh;

    Student(String ism, int yosh) {
        this.ism = ism;
        this.yosh = yosh;
    }
}

public class Main {

    public static void main(String[] args) {

        Student talaba = new Student("Ali", 18);

        System.out.println(talaba.ism);
        System.out.println(talaba.yosh);
    }
}

Natija:

Ali
18

Bir nechta object yaratish

Constructor yordamida turli objectlarni juda oson yaratish mumkin.

Student talaba1 = new Student("Ali", 18);
Student talaba2 = new Student("Vali", 20);
Student talaba3 = new Student("Hasan", 19);

Har bir object o‘z qiymatlariga ega bo‘ladi.


Constructor va method farqi

Constructor va method bir-biriga o‘xshashi mumkin, lekin ular boshqa-boshqa narsalar.

Constructor

Object yaratilganda avtomatik ishlaydi.

Student(String ism) {
    this.ism = ism;
}

Method

Biz uni kerak bo‘lganda chaqiramiz.

void salomBer() {
    System.out.println("Salom!");
}

Masalan:

talaba.salomBer();

Constructor avtomatik chaqiriladi

Masalan:

class Car {

    Car() {
        System.out.println("Constructor ishladi.");
    }
}

Keyin:

Car mashina = new Car();

Biz:

constructor()

deb yozmadik.

Lekin constructor avtomatik ishladi.


Parametrsiz constructor

Constructor parametr qabul qilmasligi ham mumkin.

class Car {

    Car() {
        System.out.println("Yangi mashina.");
    }
}

Object:

Car mashina = new Car();

Parametrli constructor

Constructor parametr qabul qilishi mumkin.

class Car {

    String model;

    Car(String model) {
        this.model = model;
    }
}

Object:

Car mashina = new Car("BMW");

Endi:

System.out.println(mashina.model);

Natija:

BMW

Bir nechta constructor

Bitta classda bir nechta constructor bo‘lishi mumkin.

Masalan:

class Student {

    String ism;
    int yosh;

    Student() {
        ism = "Noma'lum";
        yosh = 0;
    }

    Student(String ism, int yosh) {
        this.ism = ism;
        this.yosh = yosh;
    }
}

Endi ikkala usuldan ham foydalanish mumkin:

Student talaba1 = new Student();

Student talaba2 = new Student("Ali", 18);

Bu constructor overloading deyiladi.

Hozircha uning nomini eslab qolish kifoya.


Constructor yordamida method chaqirish

Constructor ichida boshqa kodlarni ham yozish mumkin.

Masalan:

class Car {

    String model;

    Car(String model) {
        this.model = model;
        System.out.println(model + " yaratildi.");
    }
}

Object:

Car mashina = new Car("Toyota");

Natija:

Toyota yaratildi.

Real hayotdagi misol

Tasavvur qiling, yangi o‘quvchi tizimga qo‘shilmoqda.

Student talaba = new Student("Ali", 18);

Constructor:

Student(String ism, int yosh)

object yaratilayotgan paytda o‘quvchining ismi va yoshini qabul qiladi.

Bu ma'lumotlar object ichida saqlanadi.


Amaliy mashqlar

1-mashq

Car classini yarating.

Unda:

model
rang

fieldlari bo‘lsin.

Constructor orqali ularga qiymat bering.

Masalan:

Car mashina = new Car("BMW", "Qora");

2-mashq

Student classini yarating.

Constructor:

ism
yosh

qabul qilsin.

3-mashq

Book classini yarating.

Constructor orqali:

nom
muallif
sahifalar

qiymatlarini bering.

4-mashq

Parametrsiz constructor yarating.

U object yaratilganda:

Object yaratildi.

degan yozuvni chiqarsin.

5-mashq

Bitta classda ikkita constructor yarating:

parametrsiz

va:

parametrli

Keyin ikkalasidan ham foydalanib ko‘ring.


Muhim narsalarni eslab qoling

Constructor object yaratilganda avtomatik ishlaydi.

Constructor nomi class nomi bilan bir xil bo‘ladi.

Masalan:

class Student {

    Student() {
    }

}

Constructor qiymat qabul qilishi mumkin:

Student(String ism, int yosh) {
    this.ism = ism;
    this.yosh = yosh;
}

Object yaratish:

Student talaba = new Student("Ali", 18);

this joriy objectni bildiradi.

Constructor objectga boshlang‘ich qiymat berishda juda foydali.