Статическое перечисление против нестатического перечисления [дубликат]


этот вопрос уже есть ответ здесь:

в чем разница между статическим и нестатическим перечислением в 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 64

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 are inherently static, нет необходимости и не имеет никакого значения при использовании static-keyword на enums.

если перечисление является членом класса, оно неявно статично.

интерфейсы могут содержать объявления типа элемента. Объявление типа члена в интерфейсе неявно статично и открыто.

форум сообщества Oracle и обсуждение этого