Java-da qurucu


konstruktor JavaBaxılıb 134

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Java-da bir konstruktor, bir sinifin yaradılması zamanı icra olunan xüsusi bir metoddan başqa bir şey deyil. Sinif üçün bir obyekt yaratdığımız zaman, java kompilyatoru bu sinifin qurucusunu dolayısı ilə çağırır. Sinif daxilində istifadə etdiyimiz obyekt üçün arqumentləri başlamaq üçün konstruktordan istifadə edə bilərik. Bu təlimatda biz də öyrənəcəyik növləri Java Constructors, Constructor Aşırı Yükləmə, Constructor Chaining.

Java Konstruktor Nümunəsi

Aşağıdakı şəkildə bir konstruktor yarada bilərik. Java-da qurucu 4 hissədən ibarətdir:

  • Giriş dəyişdiricisi - Məsələn: aşağıdakı nümunədəki kimi ictimai
  • İnşaatçı adı - Məsələn: İşçi
  • Mübahisələr - İstəyə görə. Dəyər təyin etmək üçün parametrlər dəyişənlər
  • Konstruktorun gövdəsi - Tələb olunduqda dəyişənlərə və ya hər hansı bir kod hissəsinə dəyərlər təyin etmək
public class Employee {


  public Employee()
  {
  //Body of constructor
  }
  public static void main(String[] args) {
    Employee e1 = new Employee();
  }
}

Bir konstruktorun işi

Yuxarıda göstərilən nümunədə gördüyünüz kimi, Konstruktorun təyin olunduğu “İşçi” adlı bir sinifimiz var. Əsas metodda Employee sinfi üçün yeni bir açar sözdən istifadə edərək e1 adlı bir obyekt yaradırıq. Bu sətir icra edildikdə java tərtibçisi İşçi konstruktorunu çağırır.

Java-da qurucuPin

Konstruktorun xüsusiyyətləri

  • Java-da bir konstruktor sinif adı ilə eyni ada sahib olmalıdır.
  • Heç bir qaytarma növü yoxdur
  • Abstrakt, statik və ya son ola bilməz

Java Konstruktorlarının növləri

Java-da 3 müxtəlif tip konstruktor var:

Java Konstruktorlarının növləriPin

Varsayılan Java qurucusu

Sinif üçün Java-da heç bir konstruktor yaratmadığımızda, Java tərtibçisi a əmrini yaradır default qurucu. Bu kod java sənədində bizə görünməyəcək, lakin .class faylında olacaqdır. Heç bir kod içermir və konstruktorun gövdəsi boş olacaq.

Java-da qurucuPin

Arqument konstruktoru yoxdur

Java-da konstruktora heç bir parametr ötürmədiyimiz zaman a mübahisəsiz konstruktor. Varsayılan və mübahisəsiz konstruktor arasındakı əsas fərq budur ki, burada java sənədində görünən boş arqumentlərlə konstruktoru təyin edirik, halbuki default qurucu kodu bizə görünmür və java kompilyatoru tərəfindən yaradılacaqdır. Həm də varsayılan konstruktorda kompilyator boş bir konstruktor yaradır, arqumentsiz konstruktorda dəyərlər təyin etmək üçün istənilən kodu müəyyən edə bilərik.

public class Employee {

  public Employee()
  {
    System.out.println("No argument constructor");
  }
  public static void main(String[] args) {
    Employee e1 = new Employee();

  }

}
No argument constructor

Yuxarıda göstərilən nümunədə gördüyümüz kimi, e1 obyekti yaradıldıqda, konstruktoru çağırır və çıxış sətirini çıxış olaraq yazdırır.

Parametrləşdirilmiş Java konstruktoru

Parametrləri və ya arqumentləri Java-da bir konstruktora ötürdükdə, a kimi çağırırıq Parametrləşdirilmiş konstruktor. Bu arqumentləri sinifdəki dəyişənlərə dəyərlər təyin etmək üçün istifadə edə bilərik.

public class Employee {
  int empid;
  String empname;
  public Employee(int id, String name)
  {
    empid = id;
    empname = name;
  }
  public static void main(String[] args) {
    Employee e1 = new Employee(102,"Ravi");
    System.out.println("Employee id: " + e1.empid);
    System.out.println("Employee Name: " + e1.empname);
  }

}
Employee id: 102
Employee Name: Ravi

Yuxarıdakı nümunədə, tam ədədin "id" və String tipinin "adı" olan konstruktora 2 arqument ötürürük. Konstruktorun içərisində "empid" və "empname" sinif dəyişənlərinə dəyərlər təyin edirik. Daha sonra "e2" İşçi obyektindən istifadə edərək bu 1 dəyişənə daxil ola bilərik. Bir yaratdığımız zaman sinif üçün obyekt, faktiki dəyərləri konstruktora ötürürük ki, tərtibçi başlanğıc zamanı bu dəyişənlərə dəyərlər təyin etsin, bu da dəyişən deməkdir "boş”Dəyərinə sahib olacaq 102 və dəyişən “adı”“ Dəyərinə sahib olacaqRavi".

Parametrləşdirilmiş konstruktorda istisna

Fərz edək ki, parametrləşdirilmiş konstruktorlu bir sinifimiz var və obyekt yaradılması zamanı mübahisəsiz konstruktor deyirik. Bu vəziyyətdə bir istisna olur, çünki tərtibçi mübahisəsiz bir konstruktor axtarır. Parametrləşdirilmiş bir tip təyin etdiyimiz üçün tərtibçi bu vəziyyətdə standart bir konstruktor yaratmayacaq.

Aşağıdakı kodda bu nümunəni aydın şəkildə görə bilərik.

public class Employee {
  int empid;
  String empname;
  public Employee(int id, String name)
  {
    empid = id;
    empname = name;
  }
  public static void main(String[] args) {
    Employee e1 = new Employee();
    System.out.println(e1.empid);
  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The constructor Employee() is undefined

  at Employee.main(Employee.java:11)

Parametrləşdirilmiş konstruktoru sildiyimizi düşünək, sonra tərtibçi varsayılan konstruktoru əlavə edir və heç bir tərtib xətası atmır. Üçün heç bir dəyər təyin olunmadığı üçün 0 göstərir dəyişən.

public class Employee {
  int empid;
  String empname;
  public static void main(String[] args) {
    Employee e1 = new Employee();
    System.out.println(e1.empid);
  }

}
0

Konstruktorun həddindən artıq yüklənməsi

Hər birinin fərqli parametr siyahıları olan birdən çox konstruktoru olan bir sinif kimi tanınır Konstruktorun həddindən artıq yüklənməsi. Bu, hər bir konstruktorun arqumentlərə əsaslanaraq fərqli vəzifələr yerinə yetirməsi deməkdir. Aşağıdakı bir nümunəyə baxaq. Burada, biri arqumenti olmayan, ikincisi kimi parametrləri olan 3 konstruktorumuz var int və String, və arqument olaraq yalnız String ilə üçüncü. Parametr siyahısı ilə yaratdığımız obyektə əsasən, uyğun konstruktor icra olunacaq. E1 obyektinin heç bir arqumenti yoxdur, buna görə də default 100 olan dəyişənə təyin ediləcək. E2 -nin 2 arqumenti var və bu səbəbdən bu 2 dəyər olacaq. müvafiq empid və empname dəyişənlərinə təyin edilir. e3 və e4 -də yalnız String arqumenti var və bu səbəbdən empRole dəyişən 3 -cü konstruktoru çağıracaq.

Aşağıdakı proqramda konstruktorun həddindən artıq yüklənməsi izah olunur.

public class Employee {
  int empId;
  String empName;
  String empRole;
  
  public Employee() {
    this.empId = 100;
  }
  
  public Employee(int id, String name) {
    this.empId = id;
    this.empName = name;
  }
  
  public Employee(String designation) {
    this.empRole = designation;
  }
  
  public static void main(String[] args) {
    Employee e1 = new Employee();
    Employee e2 = new Employee(102,"Rakesh");
    Employee e3 = new Employee("Java Developer");
    Employee e4 = new Employee("Tester");
    System.out.println("Default value of Empid: " + e1.empId);
    System.out.println("Employee id: " + e2.empId + " " + "Employee Name:" + e2.empName);
    System.out.println("Employee Role: " + e3.empRole + " and " + e4.empRole);
    
  }

}

Default value of Empid: 100
Employee id: 102 Employee Name:Rakesh
Employee Role: Java Developer and Tester

Konstruktor Zənciri

Bir konstruktorun digər konstruktordan çağırılması deyilir Konstruktor zənciri. Bunun əsas məqsədi bir yerdə başlanğıc edə biləcəyimiz və fərqli parametrləri olan bir çox konstruktoru axtara bildiyimizdir. Bunu istifadə edən digər konstruktorları axtararaq əldə edə bilərik bu söz. Məsələn, aşağıdakı kodda görürüksə, əsas metoddan obyekt yaradılması zamanı mübahisəsiz konstruktoru çağırırıq. Bu konstruktordan ad və yaş parametrlərini ötürərək başqa bir konstruktor çağırırıq. Bu ikinci konstruktoru çağıracaq və buradan yataq daxil olmaqla 3 parametr ötürərək üçüncü konstruktoru çağırırıq. Nəhayət, konstruktorda bütün dəyişənləri işə salırıq. Burada ayrıca adlı bir metod yaradırıq ekran bileti yuxarıdakı bütün dəyərləri çap etmək.

Konstruktor ZənciriPin

Aşağıdakı proqram konstruktor zənciri haqqında izah edir.

public class TicketBooking {
  String passName;
  int passAge;
  String passBerth;
  
  public TicketBooking() {
    this("Arun",45);
  }
  public TicketBooking(String name, int age) {
    this(name,age,"Lower berth");
  }
  public TicketBooking(String name,int age,String berth) {
    this.passName = name;
    this.passAge = age;
    this.passBerth = berth;
    
  }
  void displayTicket() {
    System.out.println("Passenger Name:" + passName);
    System.out.println("Passenger Age: " + passAge);
    System.out.println("Passenger Berth: " + passBerth);
  }
  public static void main(String[] args) {
    TicketBooking tb = new TicketBooking();
    tb.displayTicket();
  }

}
Passenger Name:Arun
Passenger Age: 45
Passenger Berth: Lower berth

SuperClass konstruktorunu çağırırıq

Tutaq ki, bir ana sinifimiz və bir alt sinifimiz var, nə vaxt tərtibçi uşaq sinfi konstruktorunu çağırırsa, əvvəlcə üst sinif qurucusunu dolayısı ilə super() metodu və bundan sonra uşaq sinif qurucusunu çağırır.

Aşağıdakı nümunədə görürüksə, ParentClass olaraq College və ChildClass kimi departament olaraq qəbul edirik. İcra zamanı, tərtibçi uşaq konstruktorunu çağırmadan əvvəl bölmə sinfi üçün yeni bir obyekt nümunəsi yaratdıqda, əvvəlcə dolayısı ilə kollec konstruktorunu istifadə edərək çağırır super açar söz. Bu səbəbdən də çıxışda əvvəlcə kollec qurucusu ifadəsinin şöbə qurucusu ifadəsindən əvvəl yazıldığını görə bilərik.

Ana sinif faylı

public class College {
  
  public College() {
    System.out.println("College Name is BITS Pilani");
  }
}

Uşaq sinfi faylı

public class Department extends College {

  public String dept;
  public Department(String deptname) {
    dept = deptname;
  }
  public static void main(String[] args) {
    Department d = new Department("Computer Science");
    System.out.println("Department Name:" + d.dept);
  }

}
College Name is BITS Pilani
Department Name:Computer Science

Kopyalayıcılar

Java konstruktorundan istifadə edərək bir obyektin dəyərini digərinə kopyalaya bilərik. Konstruktordan başqa, bir obyekt sinfinin klon () metodundan istifadə edərək və ya bir obyektin dəyərini digərinə təyin edərək dəyərləri kopyalaya bilərik.

Java -da konstruktordan istifadə edən bir nümunəyə baxaq. Birinci konstruktorun parametri olaraq int və String, ikincisinin isə parametr olaraq obyekti var. Bu kimi istifadə olunur surəti konstruktor. Çıxışı görsək, hər iki obyekt eyni dəyərləri göstərir, yəni e1 obyektinin dəyərlərini konstruktordan istifadə edərək e2 obyektinə kopyaladıq.

public class Employee {
  int empId;
  String empName;

  public Employee(int id, String name) {
    this.empId = id;
    this.empName = name;
  }
  
   //Copy constructor
  public Employee(Employee emp) {
    empId = emp.empId;
    empName = emp.empName;
  }
  
  public void displayDetails() {
    System.out.println("Employee ID:" + empId);
    System.out.println("Employee Name:" + empName);
  }
  
  public static void main(String[] args) {
    Employee e1 = new Employee(102,"Dev");
    //Create a copy of another object
    Employee e2 = new Employee(e1);
    e1.displayDetails();
    e2.displayDetails();
  }

}

Employee ID:102
Employee Name:Dev
Employee ID:102
Employee Name:Dev

Aşağıdakı nümunə, konstruktorlardan istifadə etmədən dəyərləri necə kopyalaya biləcəyinizi göstərir. Burada bir obyektin dəyərlərini digərinə təyin edirik.

public class Employee {
  int empId;
  String empName;
  
  public Employee(int id, String name) {
    this.empId = id;
    this.empName = name;
  }
  public Employee() {
    
  }
  
  public void displayDetails() {
    System.out.println("Employee ID:" + empId);
    System.out.println("Employee Name:" + empName);
  }
  public static void main(String[] args) {
    Employee e1 = new Employee(102,"Dev");
    Employee e2 = new Employee();
    e2.empId = e1.empId;
    e2.empName = e1.empName;
    e1.displayDetails();
    e2.displayDetails();
  }

}

Employee ID:102
Employee Name:Dev
Employee ID:102
Employee Name:Dev

Bu yazıda, artıq Java Konstruktorları, Konstruktor Aşırı Yükləmə və Konstruktor Zəncirləmə növləri barədə məlumat vermişik. İndi Metod və Konstruktor arasındakı bəzi fərqləri müzakirə edək.

Java-da Metod və Konstruktor arasındakı fərq

Çoxları konstruktoru xüsusi bir metod adlandırsa da, Java-da bir Metod və Konstruktor arasında bir neçə fərq var.

Java KonstruktoruJava metodu
Bir obyekt vəziyyətini başlatırObyektin davranışını təsvir edir
Qaytarma növü yoxdurQaytarma növü var
Dolayısı ilə çağırılırBu açıq şəkildə çağırılır
İnşaatçı adı sinif adı ilə eyni olmalıdırMetod adı sinif adından asılı olmayaraq hər şey ola bilər

arayış

Crack Sistemi Dizayn Müsahibələri
Translate »
2