Когда мы должны использовать неинициализированную статическую конечную переменную? Я знаю, что неинициализированной статической конечной переменной могут быть назначены только значения в статическом блоке инициализатора, но я не могу думать о каком-либо реальном использовании для этого.
Когда мы должны использовать неинициализированную статическую конечную переменную?
Ответ 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
Статическая конечная переменная должна быть инициализирована во время создания, в отличие от пустых конечных переменных, вы не можете отложить инициализацию до конструктора, потому что они статичны.