Статическое перечисление против нестатического перечисления [дубликат]
этот вопрос уже есть ответ здесь:
в чем разница между статическим и нестатическим перечислением в Java? Оба обычая одинаковы.
верно ли, что все статические загружаются в память при запуске, и нестатические они загружаются по требованию?
Если да, то какой метод лучше? Хранение некоторых данных всегда в памяти или использование ресурсов сервера для их загрузки каждый раз?
public class Test {
public enum Enum1 {
A, B
}
public static enum Enum2 {
C, D
}
public static void main(String[] args) {
Enum1 a = Enum1.A;
Enum1 b = Enum1.B;
Enum2 c = Enum2.C;
Enum2 d = Enum2.D;
}
}
4 ответа:
все
enum
s эффективноstatic
. Если у вас есть вложенное перечисление, это почти то же самое, что иstatic class
.все классы лениво загружаются (перечисления или иначе), однако, когда они загружаются, они загружаются все сразу. т. е. вы не можете иметь несколько констант загружены, но не другие (кроме как в середине инициализации класса)
Java позволяет некоторым модификаторам быть неявной, чтобы избежать необходимости объявлять их все время. Это означает, что добавление модификатора не обязательно делать что-то другое, кроме обеспечения более длительного способа написания того же самого.
модификаторы по умолчанию для
поле класса / метод / вложенный класс-пакет локальный, не окончательный, нестатический
enum и вложенное перечисление - пакет локальных, final и static
поле интерфейс -
public static final
метод интерфейса -
public abstract
вложенный класс в интерфейсе -
public static
, non-finalПримечание:
static
является необязательным дляenum
Он всегда статичен. Однако,final
не может быть установлен для перечисления, даже если это всегда условноfinal
(технически вы можете иметь подклассы с переопределенными реализациями для констант)EDIT: единственное место, которое вам нужно использовать
static
Сenum
сimport static
значения перечисления. Спасибо @man910
Если вы говорите о вложенных перечислений, они неявно
static
по умолчанию.по словам Спецификация Языка Java:
вложенные типы перечислений неявно статичны. Допустимо: явно объявите вложенный тип перечисления статическим.
все перечисления неявно статичны, просто вам не нужно писать
static
ключевое слово. Аналогично тому, как все методы интерфейса неявно являются общедоступными.
как
enums
areinherently static
, нет необходимости и не имеет никакого значения при использованииstatic-keyword
наenums
.если перечисление является членом класса, оно неявно статично.
интерфейсы могут содержать объявления типа элемента. Объявление типа члена в интерфейсе неявно статично и открыто.