Javanese Online

Конструктор. Финальные поля

Конструктор — это метод, в котором можно привести объект в его начальное состояние. У него нет возвращаемого значения, а имя совпадает с именем класса. Вызывается конструктор вместе с оператором 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) объекты устроены проще изменяемых и работают надёжнее.

Комментарии к уроку

Сообщить об ошибке

Javanese.Online в GitHub

Чаты и каналы в Telegram

RSS-лента