CodeGym /Kurslar /JAVA 25 SELF /Sinifin quruluşu: sahələr, metodlar, konstruktorlar

Sinifin quruluşu: sahələr, metodlar, konstruktorlar

JAVA 25 SELF
Səviyyə , Dərs
Mövcuddur

1. Sinif sahələri: obyektin vəziyyətini harada saxlayırıq

Sahə — bu, sinif daxilində, lakin bütün metodlardan kənarda elan olunan dəyişəndir. Sahələr hər obyektin öz “vəziyyətə” malik olmasına cavabdehdir. Məsələn, əgər bizdə Person sinfi varsa, sahələr belə ola bilər:

  • name — şəxsin adı
  • age — yaş
  • balance — hesabda balans (əgər təsadüfən bank tətbiqi hazırlayırıqsa)
  • isStudent — bu şəxsin tələbə olub-olmamasını göstərən işarə (flag)

Sahənin elan olunmasının sintaksisi

Sahənin elanı adi dəyişənə bənzəyir, yalnız o, metod daxilində deyil, birbaşa sinifdə yerləşir:

public class Person {
    String name;
    int age;
}

Burada iki sahə elan etdik: sətir name və tam ədəd age. Hər bir sahə bu sinfin konkret obyektinə məxsus olacaq. Bu o deməkdir ki, müxtəlif obyektlərin dəyərləri fərqli olacaq. Məsələn:

Person p1 = new Person();
p1.name = "Olya";
p1.age = 20;

Person p2 = new Person();
p2.name = "Igor";
p2.age = 25;

Birinci obyektin adı — «Olya» və yaşı — 20, ikincinin isə — «Igor» və 25-dir. Onlar eyni sinifdən hazırlanıb, amma sahələri müxtəlif məlumatları saxlayır.

Giriş modifikatorları (public/private)

Sahələr açıq (public) və ya qapalı (private) ola bilər. Real həyatda siz bank hesabınızdakı balansı hamıya demirsiniz, elə deyilmi? Proqramlaşdırmada da çox vaxt sahələri private edirlər ki, onlara digər siniflərdən birbaşa müraciət etmək mümkün olmasın. Bu, inkapsulyasiya prinsipinin bir hissəsidir (ətraflı — növbəti dərslərdə).

Nümunə:

public class Person {
    private String name;
    private int age;
}

Hələlik çətinləşdirməyək, amma yadda saxlayın: əgər sahə privatedirsə, ona başqa sinifdən birbaşa müraciət etmək olmaz.

2. Sinif metodları: obyektlər necə “hərəkət edir”

Metod — bu, obyektin davranışını təsvir edən funksiyadır. Metodlar obyektə nəsə etməyə imkan verir: danışmaq, hesablamaq, qaçmaq, tullanmaq, özü haqqında məlumat çıxarmaq və s.

Metodun elan olunmasının sintaksisi

tip_vozvrashchaemogo_znacheniya imyaMetoda(parametry) {
    // metodun gövdəsi
}

“Salam” deyən metodun nümunəsi:

public void sayHello() {
    System.out.println("Salam! Mənim adım " + name);
}

Burada:

  • public — giriş modifikatorudur.
  • void — metod heç nə qaytarmır (sadəcə nəsə edir).
  • sayHello — metodun adıdır.
  • Metodun içində istifadəçini salamlamak üçün name sahəsindən istifadə edirik.

Başqa nümunə: yaşı qaytaran metod

public int getAge() {
    return age;
}

Metodlar dəyər qaytara bilər (int, String və s.) və ya “heç nə qaytarmayan” ola bilər — onda void yazırıq.

3. Konstruktorlar: obyektlər necə “doğulur”

Konstruktor — bu, yeni obyekt yaradılarkən çağırılan xüsusi metoddur. Onun vəzifəsi — obyektin sahələrini ilkin dəyərlərlə ilkləndirməkdir, yəni obyektin “boş ciblərini” konkret məlumatlarla doldurmaqdır. Məsələn, insana ad və yaşı elə yaradılma anında vermək, onları boş saxlamamaq.

  • Konstruktorun adı həmişə sinfin adı ilə üst-üstə düşür.
  • Konstruktorun qaytarma tipi yoxdur (hətta void belə yazılmır).
  • Konstruktorlar parametr qəbul edə bilər (məsələn, ad və yaş) və ya paramsız ola bilər.

Konstruktor nümunəsi

public class Person {
    String name;
    int age;

    // İki parametrli konstruktor
    public Person(String name, int age) {
        this.name = name; // this.name — obyektin sahəsi, name — konstruktorun parametri
        this.age = age;
    }
}

Yəqin maraqlandınız, bu this nədir. Belə ki, this açar sözü — cari obyektə istinaddır. Daxildən. Onu, sahə adını eyni olan parametrdən ayırmaq üçün istifadə edirik. this olmadan kompilyator kimin ilkləndirildiyini ayırd edə bilməzdi.

Defolt konstruktor

Əgər heç bir konstruktor elan etməmisinizsə, Java kompilyatoru avtomatik olaraq paramsız boş konstruktor əlavə edəcək. O, belə görünür:

public Person() {
    // heç nə etmir, amma paramsız obyekt yaratmağa imkan verir
}

ANCAQ! Əgər ən azı bir konstruktor (məsələn, parametrlə) elan etmisinizsə, defolt konstruktor artıq avtomatik yaradılmır! Ona ehtiyacınız varsa — onu açıq şəkildə yazın.

4. Tam sinif nümunəsi

Gəlin hər şeyi birləşdirək: sahələr, metodlar, konstruktor.

public class Person {
    String name;
    int age;

    // Konstruktor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Metod: salam demək
    public void sayHello() {
        System.out.println("Salam! Mənim adım " + name + ", mən " + age + " yaşındayam.");
    }

    // Metod: yaşı 1 artırmaq
    public void haveBirthday() {
        age = age + 1;
        System.out.println("Ura! Artıq mən " + age + " yaşındayam!");
    }
}

Bunu proqramda necə istifadə edək?

public class Main {
    public static void main(String[] args) {
        Person vasya = new Person("Vasya", 18);
        vasya.sayHello();      // Salam! Mənim adım Vasya, mən 18 yaşındayam.
        vasya.haveBirthday();  // Ura! Artıq mən 19 yaşındayam!
    }
}

5. Təcrübə: tətbiqinizi inkişaf etdirək

Tutaq ki, siz sadə istifadəçi uçotu tətbiqi hazırlayırsınız. Keçən dərslərdə biz yalnız main daxilində dəyişənlər və metodlarla işləyirdik. İndi sahələri, metodları və konstruktoru olan öz User sinifimizi yaradacağıq.

public class User {
    String username;
    int score;

    // Konstruktor
    public User(String username, int score) {
        this.username = username;
        this.score = score;
    }

    // Metod: istifadəçi haqqında məlumat çıxarmaq
    public void printInfo() {
        System.out.println("İstifadəçi adı: " + username + ", xallar: " + score);
    }

    // Metod: xalları artırmaq
    public void addScore(int points) {
        score += points;
        System.out.println(username + " " + points + " xal qazandı! İndi onun " + score + " xalı var.");
    }
}

İstifadə:

public class Main {
    public static void main(String[] args) {
        User alice = new User("Alice", 10);
        User bob = new User("Bob", 5);

        alice.printInfo(); // İstifadəçi adı: Alice, xallar: 10
        bob.printInfo();   // İstifadəçi adı: Bob, xallar: 5

        alice.addScore(7); // Alice 7 xal qazandı! İndi onun 17 xalı var.
        bob.addScore(3);   // Bob 3 xal qazandı! İndi onun 8 xalı var.
    }
}

Qeyd: hər bir obyektin öz sahələri var və bir obyektin dəyişiklikləri digərinə təsir etmir.

6. Giriş modifikatorları barədə qısa məlumat

Nümunələrimizdə sahələr açıq idi (String name;). Təcrübədə çox vaxt sahələri private edirlər ki, onları başqa sinifdən təsadüfən (və ya qəsdən) dəyişmək olmasın. Bunu inkapsulyasiya mövzusunda daha ətraflı öyrənəcəyik, lakin baxın, nümunə:

public class User {
    private String username;
    private int score;

    public User(String username, int score) {
        this.username = username;
        this.score = score;
    }

    public void printInfo() {
        System.out.println("İstifadəçi adı: " + username + ", xallar: " + score);
    }

    public void addScore(int points) {
        score += points;
    }
}

İndi kimsə sinifdən kənarda alice.score = 100500; yazmağa cəhd etsə — kompilyator «olmaz!» deyəcək.

7. Sahələr, metodlar və konstruktorlarla işləyərkən tipik səhvlər

Səhv №1: İlkləndirilməmiş sahələr.
Əgər sahələrə dəyər vermirsinizsə, onlar defolt dəyərlər alır: ədədlər — 0, booleanfalse, istinadlar (məsələn, String) — null. Sahəni ilkləndirməyi unutsanız, gözlənilməz nəticə və hətta onunla nəsə etməyə cəhd zamanı NullPointerException ala bilərsiniz.

Səhv №2: Parametrləri sahələrlə səhv salmaq.
Konstruktorlarda yeni başlayanlar tez-tez sadəcə name = name; yazırlar — bu, sahəni ilkləndirmir, sadəcə parametrə elə özünü mənimsədir. Həmişə this.name = name istifadə edin!

Səhv №3: Defolt konstruktor yoxdur.
Əgər parametrlə konstruktor elan etmisinizsə, lakin defolt (boş) konstruktoru açıq şəkildə əlavə etməyi unutmusunuzsa, o zaman new Person() artıq işləməyəcək.

Səhv №4: Metod və sinif adlarının eyni olması.
Java-da konstruktorun adı sinfin adı ilə üst-üstə düşməlidir, metodların isə məcbur deyil. Bəzən səhvən metodu sinif kimi adlandırırlar və kompilyator etiraz edir.

Səhv №5: Giriş modifikatorlarını unutmaq.
Əgər sahələri public etsəniz, onları istənilən yerdə dəyişmək olar — bu, böyük proqramlar üçün təhlükəlidir. Daha yaxşısı, dərhal private-a öyrəşin və giriş üçün metodlardan istifadə edin.

1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Virtual vitrinadakı arzu avtomobili
Virtual vitrinadakı arzu avtomobili
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Yeni tələbənin sürətli qeydiyyatı
Yeni tələbənin sürətli qeydiyyatı
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Rəqəmsal hadisə sayğacı
Rəqəmsal hadisə sayğacı
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Bank hesablarının idarə edilməsi
Bank hesablarının idarə edilməsi
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION