Javaдагы конструктор  



Конструктор Java

Java-дагы конструктор бул класстын мисалын түзүү учурунда аткарылган атайын ыкмадан башка эч нерсе эмес. Класс үчүн объект жараткан сайын, java компилятору ошол класстын конструкторун жашыруун чакырат. Класс ичинде колдонуп жаткан объект үчүн аргументтерди баштоо үчүн конструкторду колдонсок болот. Бул сабакта биз дагы үйрөнөбүз түрлөрү Java Constructors, Constructor Overloading, Constructor Chaining.

Java Constructor Мисалы  

Биз төмөнкүдөй жол менен конструкторду түзө алабыз. Java-дагы конструктор 4 бөлүктөн турат:

  • Кирүү модификатору - Мисалы: төмөндөгү мисалдагыдай коомдук
  • Конструктордун аты-жөнү - Мисалы: Кызматкер
  • Аргументтер - Милдеттүү эмес. Берилген параметрлер өзгөрмөлөр
  • Конструктордун тулку бөлүгү - Эгер керек болсо, өзгөрмө же кандайдыр бир код бөлүгүнө маани берүү
public class Employee {


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

Конструктордун иштеши  

Жогорудагы мисалдан көрүнүп тургандай, бизде Конструктор аныкталган "Кызматкер" деген класс бар. Негизги методдо Employee классы үчүн жаңы ачкыч сөздү колдонуп, e1 деген объект түзөбүз. Бул сап аткарылганда, java компилятору Кызматкердин конструкторун чакырат.

Javaдагы конструктортөөнөч

Конструктордун өзгөчөлүктөрү  

  • Java-дагы конструктор класстын аты менен бирдей аталышы керек.
  • Анын кайтарым түрү жок
  • Ал абстрактуу, статикалык же акыркы болушу мүмкүн эмес
ошондой эле
FileReader Java - Javaда FileReaderди кантип колдонсо болот жана Java FileReader мисалдары менен FileReader классы жана методдору үчүн эмнелерди импорттоого болот.

Java конструкторлорунун түрлөрү  

Javaда 3 ар кандай конструкторлор бар:

Java конструкторлорунун түрлөрүтөөнөч

Демейки Java конструктору

Java үчүн класс үчүн эч кандай конструкторду түзбөгөндө, Java компилятору a түзөт жарыяланбаган конструктор. Бул код бизге java файлында көрүнбөйт, бирок .class файлында болот. Ал эч кандай кодду камтыбайт жана конструктордун тулку бою бош калат.

Javaдагы конструктортөөнөч

Аргумент конструктору жок

Javaдагы конструкторго эч кандай параметр өткөрбөгөндө, аны а деп атайбыз аргументсиз конструктор. Демейки менен аргументсиз конструктордун негизги айырмачылыгы, бул жерде биз конструкторду java файлында көрүнгөн бош аргументтер менен аныктайбыз, ал эми демейки конструктор коду бизге көрүнбөйт жана java компилятору тарабынан түзүлөт. Ошондой эле, демейки конструктордо, компилятор бош куруучуну жаратат, ал эми аргументсиз конструктордо биз маани берүү үчүн каалаган кодду аныктай алабыз.

public class Employee {

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

  }

}
No argument constructor

Жогоруда келтирилген мисалдан көрүнүп тургандай, e1 объектиси түзүлгөндө, ал конструкторду чакырып, сөз саптарын чыгаруу катары чыгарат.

Параметрлештирилген Java конструктору

Javaдагы конструкторго параметрлерди же аргументтерди өткөрүп бергенде, аны а деп атайбыз Параметрленген конструктор. Ушул аргументтерди колдонуп, класстагы өзгөрмөлөргө маани берсек болот.

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

In the above example, we are passing 2 arguments to the constructor which is the “id” of integer type and “name” of String type. Inside the constructor, we assign values to the class variables “empid” and “empname”. We can then access these 2 variables using the Employee object “e1”. When we create an object for the class, we pass the actual values to the constructor so that the compiler assigns values to these variables during initialization which means the variable “эмпид”Маанисине ээ болот 102 жана өзгөрүлмө “эмпам"Маанисине ээ болот"Ravi".

ошондой эле
Javaдагы массивди кантип кайтаруу керек

Параметрленген конструктордогу өзгөчө кырдаал

Бизде параметрленген конструктору бар класс бар дейли жана объект жаратууда аргументсиз конструктор деп атайбыз. Бул учурда, биз өзгөчө учурга туш болобуз, анткени компилятор аргументсиз конструкторду издейт. Компилятор бул учурда демейки конструкторду түзбөйт, анткени биз параметрленген типти аныктадык.

Бул мисалды төмөндөгү коддон ачык көрө алабыз.

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)

Параметрлештирилген конструкторду алып салдык дейли, анда компилятор демейки конструкторду киргизип, эч кандай компиляция катасын кетирбейт. Бул 0 көрсөтөт, анткени эч кандай маани берилбейт туруксуз.

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

}

Конструктордун ашыкча жүктөлүшү  

Ар биринин ар башка параметр тизмеси бар бир нече конструктору бар класс катары белгилүү Конструкторго ашыкча жүктөө. This means each constructor performs different tasks based on the arguments. Let’s see an example below. Here, we have 3 constructors, one with no argument, second with parameters as int and String, and third with only String as an argument. Based on the object we create with the parameter list, the corresponding constructor will get executed.e1 object has no arguments, hence the default will be assigned to the variable which is 100. e2 has 2 arguments with values and hence these 2 values will be assigned to the corresponding empid and empname variables. e3 and e4 have only String argument and hence this will call the 3rd constructor which has the variable empRole.

ошондой эле
Java-да регистрди алмаштырыңыз

Төмөндөгү программа конструктордун ашыкча жүктөлүшү жөнүндө түшүндүрмө берет.

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

Конструктор чынжырчасы  

Бир конструкторду экинчи конструктордон чакыруу деп аталат Конструкторду чынжырлоо. Мунун негизги максаты - инициализацияны бир жерде жасап, ар кандай параметрлери бар көптөгөн конструкторлорду чакыра алабыз. Башка конструкторлорду колдонуп чалып, буга жетише алабыз бул ачкыч. Мисалы, төмөндөгү коддон байкасак, объектти жаратуу учурунда аргументсиз конструкторду негизги ыкмадан чакырабыз. Бул конструктордон биз аты жана жашы параметрлерин өткөрүп, башка конструкторду атайбыз. Бул экинчи конструкторду чакырат жана ушул жерден биз үчүнчү конструкторду, анын ичинде причалдын ичиндеги 3 параметрди өткөрүп беребиз. Демек, акыры, конструктордо биз бардык өзгөрүлмө инициалды баштайбыз. Бул жерде өзүнчө ыкма түзүп жатабыз displayTicket жогоруда көрсөтүлгөн бардык баалуулуктарды басып чыгаруу.

Конструктор чынжырчасытөөнөч

Төмөндөгү программа конструкторду чынжырлоо жөнүндө түшүндүрмө берет.

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 конструкторун чакыруу  

Бизде ата-эне классы жана бала классы бар дейли, качан компилятор бала класстын конструкторун чакырган сайын, ал биринчи кезекте ата-энесинин куруучусун жашыруун түрдө супер() ыкмасы жана андан кийин бала класстык конструктор деп аталат.

ошондой эле
Java бул ачкыч сөз

Төмөндөгү мисалдан көрө турган болсок, бизде ParentClass Колледж жана ChildClass бөлүмү бар. Аткаруу учурунда, компилятор бала конструкторун чакырардан мурун, бөлүмдүн классы үчүн жаңы объекттин нускасын түзгөндө, ал биринчи кезекте колледж конструкторун кыйыр түрдө чакырат супер ачкыч сөз. Ошондуктан чыгарылышта алгач колледждин конструкторунун билдирүүсү бөлүмдүн конструкторунун билдирүүсүнүн алдында басылып чыккандыгын байкай алабыз.

Ата-эне классынын файлы

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

Child Class файлы

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

Көчүрүү Constructors  

Java конструкторун колдонуп, бир объекттин маанисин башкасына көчүрө алабыз. Конструктордон тышкары, биз дагы бир нерсени Object классынын clone () ыкмасын колдонуп же башка бир объекттин маанисин ыйгарып, баалуулуктарды көчүрө алабыз.

Let’s see an example using the constructor in Java. The first constructor has an int and String as a parameter and the second has an object as a parameter. This is used as a көчүрмө конструктор. If we notice the output, both objects display the same values which mean, we have copied the values of object e1 to object e2 using a constructor.

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

Төмөндөгү мисалда, конструкторлорду колдонбостон, баалуулуктарды кантип көчүрүп алсаңыз болот. Бул жерде биз бир объекттин маанилерин экинчи объектке ыйгарабыз.

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

Бул макалада биз Java Constructors, Constructor Overloading жана Constructor Chaining түрлөрүн камтыганбыз. Эми Метод менен Конструктордун айрым айырмачылыктарын талкуулайлы.

ошондой эле
ArrayList жана LinkedList

Javaдагы метод менен конструктордун айырмасы  

Көпчүлүк конструкторду атайын ыкма деп атаса дагы, Javaдагы Method менен Constructorдун ортосунда бир нече айырмачылыктар бар.

Java ConstructorJava методу
Объекттин абалын баштайтОбъекттин жүрүм-турумун сүрөттөйт
Кайтаруучу түрү жокАнын кайтаруу түрү бар
Ал кыйыр түрдө колдонулатАл ачык-айкын колдонулат
Конструктордун аты класс аты менен бирдей болушу керекМетоддун аталышы класстын аталышына карабастан болушу мүмкүн

шилтеме

2