静态枚举与非静态枚举

2022-08-31 11:13:04

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;
    }
}

答案 1

所有 s 都是有效的 。如果您有嵌套枚举,则它与 .enumstaticstatic class

所有类都是懒惰加载的(枚举或其他),但是当它们被加载时,它们会一次加载所有。也就是说,你不能加载几个常量,但不能加载其他常量(除了在类初始化的中间)

Java允许某些修饰符是隐式的,以避免必须一直声明它们。这意味着添加修饰符不一定能做任何事情,除了提供更长的方法来编写相同的内容。

的默认修饰符

类字段/方法/嵌套类 - 包本地、非最终、非静态

枚举和嵌套枚举 - 包本地、最终和静态

接口字段 -public static final

接口方式 -public abstract

接口中的嵌套类 - ,非最终public static

注意:虽然是可选的,但它始终是静态的。但是,不能为枚举设置,即使它总是在名义上(从技术上讲,您可以拥有具有常量的重写实现的子类)staticenumfinalfinal

编辑:您唯一需要使用的地方是枚举的值。谢谢@man910staticenumimport static


答案 2

如果你谈论的是嵌套枚举,则默认情况下它们是隐式的。static

根据 Java 语言规范

嵌套枚举类型是隐式静态的。允许将嵌套枚举类型显式声明为静态。