Конструктор — это метод, в котором можно привести объект в его начальное состояние. У него нет возвращаемого значения, а имя совпадает с именем класса. Вызывается конструктор вместе с оператором new, так: new Nokia3310().
Если в классе явно не определён ни один конструктор, генерируется публичный конструктор, который не принимает аргументов.
Изменим это: теперь, чтобы создать Nokia3310, нужно будет передать серийный номер в конструктор:
public final class Nokia3310 implements MobilePhone {
...
private String serialNumber;
public Nokia3310(String serialNumber) {
this.serialNumber = serialNumber;
}
Ключевое слово this указывает на текущий объект. Здесь явно указано this.serialNumber, потому что есть одноимённая локальная переменная.
Финальные поля
Если поле не нужно изменять в течение жизни объекта, его нужно сделать финальным с помощью модификатора final. Например, IMEI и серийный номер телефона не могут изменяться.
private final long imei = 100000000000000L + new Random().nextLong();
private final String serialNumber;
Значение финального поля можно задать только в конструкторе. Инициализация «на месте» (как у IMEI) эквивалентна инициализации в конструкторе:
public final class Nokia3310 implements MobilePhone {
private double batteryVoltage = 3.8;
private final long imei;
private final String serialNumber;
public Nokia3310(String serialNumber) {
this.imei = 100000000000000L + new Random().nextLong();
this.serialNumber = serialNumber;
}
Чем больше в объекте доля финальных полей, тем меньше потенциальных точек отказа. Полностью неизменяемые (immutable) объекты устроены проще изменяемых и работают надёжнее.