当前位置: 首页 > 面试题库 >

静态枚举与非静态枚举

武琛
2023-03-14
问题内容

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

问题答案:

所有enum的都是有效的static。如果您有嵌套的枚举,则它与相同static class

所有类都是延迟加载的(枚举或其他),但是在加载时,它们会一次全部加载。也就是说,您不能加载一些常量,而不能加载其他常量(在类初始化过程中除外)

Java允许隐含某些修饰符,从而避免始终声明它们。这意味着添加修饰符除了提供更长的编写相同内容的方法外,并不一定要做任何其他事情。

的默认修饰符

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

枚举和嵌套枚举-封装本地,最终和静态

界面字段- public static final

接口方法- public abstract

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

注意:while
static是可选的,enum它始终是静态的。但是,final即使从概念上来说,枚举始终是固定的,也不能设置该枚举final(从技术上讲,您可以具有覆盖了常量实现的子类)

编辑:您需要使用的唯一的地方staticenumimport static一个枚举的价值。谢谢@ man910



 类似资料:
  • 问题内容: 我正在查看公司其他部门维护的一些Java代码,顺便说一下,这是一些前C和C ++开发人员所维护的。普遍存在的一件事是使用静态整数常量,例如 除了缺少“最终”限定符外,这种代码也让我有些不安。我本来希望看到的是,从学校开始主要接受Java的培训,这会更像 但是,论点使我失望。为什么要比后者更好呢? 问题答案: 为什么要比后者更好呢? 这样做要好得多,因为它可以为您提供类型安全性并具有自记

  • 问题内容: 我已经了解到,在Java中,静态类在初始化类时执行,实例块在构造类的每个实例之前执行。我一直看到静态块要在实例块之前执行。为什么情况相反呢? 谁能解释一下示例代码的输出: 输出: 实例块 8 实例块 10 实例块 12 实例块 20 静态块 问题答案: 您需要知道枚举值是保存该枚举类型实例的静态字段,并且静态字段的初始化顺序取决于它们的位置。看这个例子 输出 现在,由于枚举值始终放在枚

  • 问题内容: 直到几周前,我还以为我知道何时创建字段和方法或。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为。 但是几周后,我读到了有关JVM垃圾收集的信息。 我知道字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。 但是,如果我不创建该字段,至少它将被垃圾回收。 因此,在使字段/方法静态化与否之间似乎有一条 很细的界限 。 有人可以

  • 问题内容: public enum Operations { 在上面的代码中,两个操作的操作值都会更改。如何有两个具有不同操作类型的Operations.SINGLE实例? 问题答案: 是的,实例是隐式的和。这意味着代码是不明智的。想象两个线程都在调用;您将不会对自己的通话充满信心。 根据Java语言规范的8.9节: 枚举类型(§8.9)不能声明为抽象;这样做会导致编译时错误。 枚举类型是隐式最终

  • 问题内容: 我有一个枚举类型类: 如您在上面看到的,我定义了一种具有value的类型。它包含一个特定于常数的主体。在其主体中,我尝试调用 ,但出现编译错误: 无法静态引用非静态方法printMe()。 为什么会出现此错误?我的意思是我在体内重写了一种抽象方法。为什么在范围内?如何摆脱它? 我知道在上添加关键字可以解决问题,但是我想知道是否还有其他方法可以保持非静态状态吗? 另一个问题,与上面的问题

  • 问题内容: 有什么方法可以在Java枚举声明中定义静态最终变量(有效常量)? 我想要在一个地方定义BAR(1 … n)值的字符串文字值: 对于以上代码,我收到以下错误消息: 在定义字段之前无法引用它 。 问题答案: 正如IntelliJ IDEA建议的那样,在提取常量时-制作静态嵌套类。此方法有效: