Самой важной функцией в любом классе является конструктор. Он позволяет создавать экземпляр объекта. Если у вас нет конструктора, то создается конструктор по умолчанию:
1
2
3
4
5
6
7
8
|
public class User {
int age;//поле
String firstName;//поле
String lastName;//поле
User() {//вот так выглядит конструктор по умолчанию
//пусто
}
}
|
Как вы могли заметить конструктор имеет тоже имя, что и название класса.
Конструкторы, как и функции могут принимать на вход некоторый набор параметров, которые они в дальнейшем используют при создании объекта.
1
2
3
4
5
6
7
8
9
10
|
public class User {
int age;//поле
String firstName;//поле
String lastName;//поле
public User(int age, String firstName, String lastName) {//конструктор с тремя параметрами
this.age = age;
this.firstName = firstName;
this.lastName = lastName;
}
}
|
Очевидно, что конструкторы вызываются в момент создания объекта:
1
|
User user = new User(18,"Bendjamin","Button");
|
Таким образом, мы создали объект класса User, поле Age, которого содержит значения 18, firstName Bendjamin, а lastName Button.
Использование данного конструктора намного удобнее, чем если бы мы пытались сделать это в ручную:
1
2
3
4
|
User user = new User();
user.age = 18;
user.firstName = "Bendjamin";
user.lastName = "Button";
|
Кроме этого, если вы используете какие — то конструкторы, то конструктор по умолчанию не создается. Таким образом, если у нас есть только конструктор от трех параметров, то мы никак не можем создать объект данного класса не вызвав его:
1
|
User user = new User();//ошибка, конструктор по умолчанию отсутствует
|
Перейдем к некоторым плюшкам intellij idea. Нажмем alt+insert:
Это меню автоматической генерации некоторых полезных вещей для класса. Нас здесь сегодня интересует пункт Constructor. Теперь если у вас в классе есть поля, то можно выбрать от каких полей нужно создать конструктор и среда программирования сама за вас напишет его код. Если вам нужен еще один конструктор, то опять нажмите заветные кнопочки и добавьте еще один:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class User {
int age;//поле
String firstName;//поле
String lastName;//поле
public User(int age, String firstName, String lastName) {
this.age = age;
this.firstName = firstName;
this.lastName = lastName;
}
public User(int age) {
this.age = age;
}
}
|
Теперь рассмотрим странную строчку this.названиеПеременной = названиеПеременной. Ключевое слово this показывает, что необходимо текущему экземпляру класса присвоить значение, переданное в конструктор. Таким образом, если мы бы писали вне класса, то user.age = age, где age это обычная переменная.
Внутри конструкторов можно вызывать другие конструкторы, например:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class User {
int age;//поле
String firstName;//поле
String lastName;//поле
public User(int age, String firstName, String lastName) {
this.age = age;
this.firstName = firstName;
this.lastName = lastName;
}
public User(int age) {
this(age,"unknown", "unknown");//вызываю конструктор от трех параметров
}
}
|
[note]Кроме того, если в вашем классе использовалось наследование, то для того, чтобы вызвать конструктор родителя необходимо применять ключевое слово super[/note]
Конструкторы нужны для начальной настройки объекта, если необходимо произвести какие — то действия с полями, например проинициализировать их.
|