Когда мы должны использовать неинициализированную статическую конечную переменную?

Когда мы должны использовать неинициализированную статическую конечную переменную? Я знаю, что неинициализированной статической конечной переменной могут быть назначены только значения в статическом блоке инициализатора, но я не могу думать о каком-либо реальном использовании для этого.

Ответ 1

Я предполагаю, что вы имеете в виду:

 public static final Object obj;

без начального значения, явно назначенного?

Вы можете назначить его в блоке static на основе некоторых вычислений, которые могут возникать только во время выполнения, например, при чтении некоторого файла свойств для создания константы в приложении, которая неизвестна во время компиляции.

Ответ 2

Он используется, когда инициализация переменной не может быть выполнена в одной строке. Например:

private static final Map<String, String> CACHE;

static {
    Map<String, String> cache = new HashMap<String, String>();
    cache.put("foo", "bar");
    cache.put("zim", "bam");
    // lots of other entries
    CACHE = Collections.unmodifiableMap(cache);
}

Ответ 3

В принципе, если вам нужно назначить значение, которое не может быть легко представлено в одном выражении. Например, вам может понадобиться выполнить некоторую логику для построения неизменяемой карты и затем назначить ее.

Как правило, более читаемо ставить логику "построения" в отдельный статический метод и использовать это в обычном назначении:

private static final Map<String, String> FOO_MAP = buildFooMap();

Ответ 4

Static + Final

Короче говоря,

Статический - сделать его как переменную класса - независимо от объекта (всегда доступен для каждого объекта в одном месте)

Финал - чтобы он был постоянным. (Если конечный результат перед переменностью)!

Где нам нужно только статическое?

= > Может быть посчитано количество экземпляров объекта.

Где нам нужно только final?

= > Хорошо сделать что-то постоянное!

Где нам нужна статическая + финальная?

= > Сделать переменную доступной для каждого объекта и сделать константу. Как при создании класса для COLOR может быть.

Для пустых статических переменных инициализация выполняется статическим блоком.

public class StaticDemo
{
    private static final String name;

    static
    {  
        name = "yash";
    }
}

и почему использовать пустые? так как может быть, вы не можете инициализировать в начале. Я принимаю предыдущий.

Ответ 5

Если инициализатор для статического поля может генерировать исключение, вы не можете инициализировать его в одной строке, вы должны иметь статический блок или статический метод.

Ответ 6

Статическая конечная переменная должна быть инициализирована во время создания, в отличие от пустых конечных переменных, вы не можете отложить инициализацию до конструктора, потому что они статичны.