Финализированные переменные

188
20 июля 2019, 06:20

Когда можно инициализировать final переменную? Может ли final переменная быть аргументом метода? Есть ли у final переменной значение по умолчанию?

Answer 1

По порядку:

1. Когда можно инициализировать final переменную?

Можно проинициализировать сразу

public class Test {
    private final int i = 8;
}

Можно в конструкторе (если эта переменная не static)

public class Test {
    private final int i;
    public Test(int i) {
        this.i = i;
    }
} 

А можно в блоке инициализации (static переменная в static блоке, non-static - в non-static)

public class Test {
    private static final int i1;
    private final int i2;
    static {
        i1 = 8;
    }
    {
        i2 = 8;
    }
}

2. Может ли final переменная быть аргументом метода?

Может. Значение данной переменной нельзя будет изменить внутри самого метода (см. пример)

class Demo {
    public static void main(String[] args) {
        int i = 10;
        method(i);
        i = 12; // <- можно изменить занчение, т. к. i не final
    }
    public static void method(final int i) {
        i = 11; // <- нельзя изменить значение здесь, т. к. 
                // аргумент передается с модификатором final
    }
}

3. Есть ли у final переменной значение по умолчанию?

Нет. Значение должно быть задано вручную (см. п. 1)

READ ALSO
Как сравнить объекты по параметрам

Как сравнить объекты по параметрам

Как сравнить два объекта по их параметрамТо есть, например у меня есть два объекта:

233
Раскрывающийся список select и несколько баз данных

Раскрывающийся список select и несколько баз данных

Допустим есть объект organisations, содержащий в каждой ячейке объект, включающий в себя наименование организации, ИНН, ОГРН и адрес, примерно так:

220
Два свайп меню, как сделать открытие/закрытие в зависимости от жеста?

Два свайп меню, как сделать открытие/закрытие в зависимости от жеста?

Интересуют рабочие примеры с несколькими разными меню, которые также открываются/закрываются с помощью свайпаНапример меню 1 (поиск), открывается...

152