Какво е конструктор в Java и как го използвате?

Какво е конструктор в Java и как го използвате?

В обектно-ориентираното програмиране конструктор е специална функция, която извиквате, за да създадете обект. Конструкторите имат няколко уникални функции, които им позволяват да работят.





В Java вие наричате конструктор след неговия клас. Конструктор е метод, дефиниран в класа, към който се отнася. Конструкторите на Java могат да използват претоварване, за да осигурят алтернативно поведение. Конструкторите в Java също могат да използват наследяване, за да използват повторно кода.





Защо все пак се нуждаете от конструктори?

Конструкторите са основата на обектно-ориентираното програмиране и Java не прави изключение. Този пример показва как можете да дефинирате основен клас Circle с едно свойство на данни и един метод:





public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

След това можете да създадете екземпляр от този клас и да взаимодействате с него:

Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

Но това е по -малко удобно и стабилно, отколкото би могло да бъде. Добра обектно-ориентирана практика е да капсулирате данни, предпазвайки ги от неоторизиран достъп:



public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

Сега кодът за повикване може да използва setRadius метод и не трябва да се притеснявате за подробностите за изпълнението му:

как да накараме Алекса да играе youtube
Circle c = new Circle();
c.setRadius(2);

Конструкторите предлагат още по -добър начин за предоставяне на данни на обект, когато го създавате. Те много често се използват за инициализиране на свойства, като например радиус тук.





Примери за прости конструктори

Най -основният конструктор е този без аргументи, който не прави нищо:

public class Circle {
public Circle() {}
}

Вижте също: Научете как да създавате класове в Java





Ако не дефинирате конструктор, Java ще предостави такъв по подразбиране, който се държи по същия начин.

Обърнете внимание на няколко неща:

  1. Името на конструктора съвпада с името на класа.
  2. Този конструктор използва обществен модификатор на достъп, така че всеки друг код може да го извика.
  3. Конструктор не включва тип връщане. За разлика от други методи, конструкторите не могат да върнат стойност.

Конструкторите обикновено извършват някакъв вид инициализация. Обърнете внимание, че горният код не инициализира стойността на радиуса. В този случай езикът автоматично ще го настрои на нула. Този клас очаква потребител да използва setRadius () . За да използвате по -полезно по подразбиране от 0, можете да го зададете в конструктора:

public class Circle {
public Circle() { radius = 1; }
}

Кръговете, създадени с този клас, поне сега ще имат действителна площ! Обаждащият се все още може да използва setRadius () да осигури радиус, различен от 1. Но конструкторът може да бъде още по -приятелски:

public class Circle {
public Circle(double r) { radius = r; }
}

Сега можете да създавате кръгове с определен радиус още от раждането:

icloud няма да влезе в Mac
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Това е много често срещано приложение за конструкторите. Често ще ги използвате за инициализиране на променливи към стойности на параметрите.

Претоварване на конструктора

Можете да посочите повече от един конструктор в дефиницията на клас:

public Circle() { radius = 1; }
public Circle(double r) { radius = r; }

Това дава на извикващия код избор как да конструира обекти:

Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159

С малко по -сложен кръг можете да изследвате по -интересни конструктори. Тази версия запазва позицията си:

public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}

public double area() { return 3.14159 * radius * radius; }
}

Вече можете да създадете кръг без аргументи, един радиус или координати x и y заедно с радиуса. Това е същият вид претоварване, което Java поддържа за всеки метод.

Конструктор верига

Какво ще кажете за създаването на един кръг, базиран на друг? Това би ни дало възможност лесно да копираме кръгове. Спазвайте следния блок:

public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

Това ще работи, но повтаря някакъв код ненужно. Тъй като клас Circle вече има конструктор, който обработва отделните свойства, можете да го извикате вместо това с помощта на това ключова дума:

public Circle(Circle c) {
this(c.x, c.y, c.radius);
}

Това е една форма на свързване на конструктори, извикваща един конструктор от друг. Той използва по -малко код и помага за централизиране на операция, вместо да я дублира.

Извикване на родителския конструктор

Другата форма на верижно конструиране възниква, когато конструктор извика конструктор на своя родителски клас. Това може да бъде явно или неявно. За да извикате изрично родителски конструктор, използвайте супер ключова дума:

super(x, y);

Представете си клас Shape, който действа като родител на кръга:

public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

Той обработва общо позициониране за всички форми, тъй като това е функционалност, която всички споделят. Сега класът Circle може да делегира обработката на позиция на родителя си:

public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

Конструкцията на суперклас е много важен аспект на наследяване в Java . Езикът го прилага по подразбиране, ако не се обаждате изрично супер във вашите конструктори.

Достъп до модификатори на конструктори

Конструкторите могат да включват модификатор на достъп в подписа си. Подобно на други методи, това определя кои типове обаждащи се имат достъп до конструктора:

public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

Това е по -сложен пример, затова внимавайте да го разберете:

  • Класът не е абстрактен, така че е възможно да се създаде екземпляр от него.
  • Конструкторът е частен, така че само този клас може да създаде нов екземпляр.
  • Чрез статично свойство и метод, класът излага един, уникален екземпляр от себе си на обаждащите се.

Използвайте конструктори в Java за създаване на обекти

Конструкторите са жизненоважни за обектно-ориентираното програмиране. Те ви позволяват да създавате обекти, което е от съществено значение!

В Java конструкторите приличат на други методи и работят почти по същия начин. Трябва да запомните специалните правила за конструкторите по подразбиране, претоварването и веригирането на конструктори. Ако конструкторите са нови за вас, може да искате да прочетете другите основни Java концепции, които трябва да научите, когато започнете.

Дял Дял Туит електронна поща 10 основни Java концепции, които трябва да научите, когато започнете

Независимо дали пишете графичен интерфейс, разработвате софтуер от страна на сървъра или мобилно приложение, използващо Android, изучаването на Java ще ви служи добре. Ето някои основни концепции на Java, които ще ви помогнат да започнете.

Прочетете Напред
Свързани теми
  • Програмиране
  • Java
  • Съвети за кодиране
За автора Боби Джак(58 статии са публикувани)

Боби е ентусиаст на технологиите, който работи като софтуерен разработчик в продължение на почти две десетилетия. Той е запален по игрите, работи като редактор на рецензии в Switch Player Magazine и е потопен във всички аспекти на онлайн издателството и уеб разработката.

безопасно ли е да поръчвате от желание
Още от Боби Джак

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и изключителни оферти!

Щракнете тук, за да се абонирате