CodeGym /Kurslar /Java SELF AZ /Obyektlər və Konstruktorlar

Obyektlər və Konstruktorlar

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Obyektin yaradılması

Bax, artıq obyektlərin yaradılmasına gəlib çatdıq. Sən bununla əvvəllər də qarşılaşmışdın, sadəcə indi bu mövzunu daha ətraflı müzakirə edəcəyik. Əslində obyektlərin yaradılması çox sadədir.

Obyekt yaratmaq üçün new operatorundan istifadə etmək lazımdır. Obyektin yaradılması təxminən belə görünür:

new Sinif(parametrlər)

Çox vaxt obyekt yaradıldıqdan dərhal sonra onu saxladığımız dəyişənin tipi də həmin obyektin tipi ilə eyni olur. Buna görə obyekt yaratma kodu adətən bu cür görünür:

Sinif ad = new Sinif(parametrlər)

Burada Sinif ad — yeni dəyişənin yaradılmasıdır, bərabərlik işarəsinin sağ tərəfindəki kod isə Sinif tipində yeni obyektin yaradılmasıdır.

Nümunələr:

Kod İzah
Object o = new Object();
Object tipində obyektin yaradılması
Cat pet = new Cat();
Cat tipində obyektin yaradılması
Scanner console = new Scanner(System.in)
Scanner tipində obyektin yaradılması

Çox vaxt proqramçılar dəyişənləri siniflərin adları ilə eyni adlandırırlar, sadəcə kiçik hərflə. Yeni başlayan proqramçılar üçün belə kod çaşqınlıq yarada bilər:

Kod
BufferedReader bufferedReader = new BufferedReader( reader );
Cat cat = new Cat();
PersonInfo personInfo = new PersonInfo()

Əslində bu kodda qorxulu bir şey yoxdur — bu, dəyişənin yaradıldığı və dərhal həmin dəyişənin tipi ilə obyektin inisializasiya edildiyi adi koddur.

Bərabərlik işarəsinin solunda — dəyişənin yaradılması, sağında isə — obyektin yaradılması durur. Vəssalam.

2. Konstruktor

Yəqin ki, tez-tez görmüsünüz ki, obyekt yaradılarkən ona hansısa parametrlər ötürülür. Həm də bəzi obyektlərə parametrlər ötürülür, bəzilərinə isə ötürülmür. Bu parametr mexanizmi ümumiyyətlə necə işləyir?

Burada da hər şey sadədir: hər bir class-da obyekt yaradılarkən parametrlərin emalına cavab verən xüsusi bir metod var (və ya metodlar). Bu cür metodlara konstruktorlar deyilir. Və bir metod uyğun olaraq konstruktor adlanır.

Konstruktor metodunu adi metoddardan kodda ayırmaq çətin deyil. Bu cür metodun iki xüsusiyyəti var:

  • konstruktor metodunun adı onun class-ının adı ilə üst-üstə düşür (və böyük hərflə başlayır)
  • konstruktor metodu geri qaytarılan nəticənin tipinə sahib deyil.

Onun ümumi görünüşü adətən belə olur:

modifikatorlar Class(parametrlər)
{
   kod
}

Nümunə:

Kod Qeyd
public class Point
{
   public int x;
   public int y;

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




Class-ın konstruktoru Point
public class Solution
{
   public static void main(String[] args)
   {
      Point point = new Point(5, 10);
   }
}




Point class-ının obyektinin yaradılması, class konstruktoru çağırılacaq.

Metod-konstruktorun necə göründüyünə diqqət yetirin: onun nəticə tipi yoxdur və adı class-ın adı ilə üst-üstə düşür.

Və bir məqam da: konstruktorun içindəki koda baxın. Konstruktorun parametr dəyişənlərinin adları class-ın sahələrinin adları ilə eynidir - x, y. Bu standart təcrübədir ki, dəyişənlərin adlarını uydurmayaq. Class sahələrinin adları ilə eyni adlar götürülür və adların toqquşması problemi "this" açar sözü ilə həll olunur.

3. Konstruktorun çağırılması

Yeni obyekt yaratdığınız zaman new operatorunun köməyi ilə və «new Class(parametrlər)» şəklində bir komanda ilə iki şey baş verir:

  • Java maşını Class tipində obyekt yaradır
  • Java maşını obyektin konstruktorunu çağırır və ora sizin parametrlərinizi ötürür

Proqramçı olaraq, siz özünüz qərar verirsiniz ki, sizin class-da hansı konstruktorlar olmalıdır və həmin konstruktorların hansı parametrləri olmalıdır.

Misal üçün, siz heyvanlar sığınacağındakı pişiklərin qeydiyyatı üçün bir class yaratmağa qərar verdiniz. Bu zaman sizin Cat class-ınız belə görünə bilər:

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 olar
Cat cat = new Cat("Vaska");
Bu isə olmaz. Kod kompilyasiya edilməyəcək.
Cat cat = new Cat();
Bu da olmaz. Kod kompilyasiya edilməyəcək.

Cat class-ında yalnız bir konstruktor var, hansı ki, o, name və age parametrlərinə malikdir. Başqa konstruktorlar olmadığı üçün, obyekt yaradarkən mütləq pişiyin adını (name) və yaşını (age) parametr kimi ötürməlisiniz. Siz konstruktor parametrsiz çağırmağı bacarmazsınız.

4. Bir neçə konstruktor

Ancaq əgər sizə lazım olsa, sinifə bir neçə konstruktor əlavə edə bilərsiniz. Konstruktorların və ya onların parametrlərinin sayına heç bir məhdudiyyət yoxdur. Obyekt yaradılarkən kompilyator özü parametrlərə uyğun konstruktoru seçəcək.

Kod Qeyd
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; // naməlum
   }
}
Cat cat = new Cat("Vaska", 2);
Belə olar: birinci konstruktor çağırılacaq
Cat cat = new Cat("Vaska");
Belə olar: ikinci konstruktor çağırılacaq
Cat cat = new Cat();
Belə olmaz. Kod kompilyasiya olunmayacaq.

Biz qərar verdik ki, pişiyin yaşının bilinməyə biləcəyini nəzərə alaq. Bu vəziyyət üçün koda xüsusi bir konstant — UNKNOWN əlavə etdik və yalnız bir parametr — pişiyin adını qəbul edən konstruktor yazdıq.

Diqqət yetirin ki, hər iki konstruktor daxilində sinif dəyişənlərini yenə də başladırıq. Naməlum/olmayan parametrləri UNKNOWN konstantı ilə əvəz edirik.

Əgər age dəyişəninə heç bir dəyər təyin edilməsə, o, standart olaraq 0 dəyərini saxlayacaq. Amma küçədə tapılan pişik balasının tam 0 yaşı ola bilər. Bu səbəbdən age dəyişənindəki sıfır heç də həmişə «naməlum yaş» demək deyil.

5. Varsayılan Konstruktor

Əgər siz istəyirsiniz ki, sizin class-dakı obyektlər heç bir parametrlə yaradılmasın, onda sizin class-ınızda parametrsiz konstruktor elan edilməlidir.

Parametrsiz konstruktor – mütləq kodsuz konstruktor deyil, o tamamilə class-ın dəyişənlərini başlanğıc dəyərlərlə inisializasiya edən kodu da daxil edə bilər:

Kod Qeyd
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 = "Adsız";
      this.age = UNKNOWN; // naməlum
   }
}
Cat cat = new Cat("Vaska", 2);
Belə olar: birinci konstruktor çağrılacaq
Cat cat = new Cat();
Belə olar: ikinci konstruktor çağrılacaq

Varsayılan Konstruktor

Çox mühüm bir məqam var ki, bunu bilməli və yadda saxlamalısınız.

Əgər sizin class-ınızda ümumiyyətlə bir dənə də konstruktor yoxdursa, kompilyator sizin class-ınıza varsayılan konstruktor əlavə edəcək – parametrsiz və kodsuz konstruktor, amma public modifikatoru ilə.

Amma əgər sizin class-ınızda ən azı bir konstruktor varsa, varsayılan konstruktor artıq əlavə edilməyəcək – bunu özünüz yazmalı olacaqsınız.

Kod Qeyd
class Cat
{
   public String name;
   public int age;
}
Cat cat = new Cat();
Belə olar: varsayılan konstruktor çağrılacaq

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION