Java枚举面试题17 Mar 2025 | 6 分钟阅读 1) 什么是枚举?枚举使一种类型能够指定一组可能的取值。下面给出的例子是一个很好的例子。有一个Animals枚举,有四种可能的值。 2) 什么是枚举序数?尽管序数不建议用于逻辑,但Java会为枚举提供默认的序数排名。 3) 可以用 Switch 语句来处理枚举吗?接下来的示例演示了如何在使用switch处理枚举。 4) 我们为什么需要枚举这个概念?枚举用于定义常量列表,因为它是一个常量列表。当只有少数几种可能性时,枚举很有用。 5) 将枚举常量指定为 static 和 final 是否有意义?是的。枚举常量是公共的、静态的和最终的,可以通过枚举名称直接访问。 6) 我们可以向枚举添加元素吗?不行,在代码中没有办法扩展枚举。它只是由关键字 Enum 指定,并且已经有元素,但这些元素无法以任何其他方式引入程序。 7) 使用 Java 枚举有什么好处?
8) Enum 的 ordinal() 方法有什么作用?ordinal 方法返回枚举实例在枚举中声明的顺序。例如,您可以在 DayOfWeek 枚举中按出现顺序定义星期。 使用 ordinal 函数,枚举中的每个元素都从零开始排序或分配一个数字。MONDAY 将是零,Tuesday 是一个,依此类推。如果我们调用 WeekDay.ordinal(),Thursday 将产生值 3。 该函数被所有用户定义的枚举从 Java.lang. Enum 抽象类继承,并且在编译器内部调用 Java.lang 受保护的函数 Object() 时进行设置。Enum 是一种接受名称和序数类型的类型。 9) Java 的 Enum 类可以实现接口吗?是的,Java 的 Enum 类可以实现接口。枚举是类型,就像类和接口一样,因此它们可以实现接口。因此,在各种情况下将 Enum 用作特定实现有很多自由度。这里也演示了 Java 中使用 Enum 实现接口。 10) 如何创建一个没有实例的枚举?在不出现编译错误的情况下,是否可能?这是 Java 面试中具有挑战性的问题之一。拥有没有实例的枚举可能看起来很奇怪,因为枚举被认为是具有明确定义的固定数量实例的集合,例如星期或一年中的月份。 但是,可以在 Java 中创建没有实例的枚举,例如,创建实用工具类。这是在 Java 中使用枚举的另一种创意方法。 11) 可以修改 Enum 的 toString() 方法吗?如果我们不这样做会发生什么?当然,您可以在 Enum 中覆盖 toString() { [native code] } 方法,因为像所有其他类一样,它会扩展 java.lang。 即使 Object 上的 toString() { [native code] }() 方法可用,您也不会真的后悔没有覆盖它,因为枚举的抽象基类会处理它并返回 name,也就是枚举实例本身的名称。 12) 可以在 Enum 之外创建 Enum 实例吗?如果不行,为什么?由于 Enum 没有公共的 Object() { [native code] } 函数,并且编译器禁止您添加一个,因此您无法在 Enum 的边界之外创建枚举实例。枚举实例必须在 Enum 内部声明,因为编译器会根据枚举类型声明生成大量代码,因此禁止在 Enum 内部使用公共构造函数。 13) 在 Java 中,可以在枚举中指定一个函数 object() 吗?这是对 Java Enum 查询的后续问题。是的,您可以,但请记住,您只能将函数 Object() { [native code] } 指定为私有或包私有。枚举内部不允许有公共和受保护的构造函数。 14) 在 Java 中,枚举可以与 TreeSet 或 TreeMap 一起使用吗?我想问这个问题来测试人们对 Java Enum 的理解。在了解 java.lang. Enum 并检查其源代码之前。 您可能不知道 Enum 实现了 Comparable 接口,这是在 TreeSet 和 TreeMap 等排序集合中使用它的必备条件。由于 Enum 默认实现 Comparable 接口,因此可以在 Java 中的 TreeSet 或 TreeMap 中安全地使用 Enum。 15) Enum 函数 ordinal() 和 compareTo() 之间有什么区别?这是关于 Java Enum 的一个后续问题。实际上,compareTo() 模仿了 ordinal() 方法的顺序,这是 Enum 的固有顺序。 简而言之,Enum 限制是按照它们声明的顺序进行比较的。另一个需要牢记的重要事项是,Enum 常量只能与同一枚举类型的其他枚举常量进行比较。如果将一种类型的枚举常量与另一种类型进行比较,将会产生编译器错误。 16) 在 Java 中,枚举可以继承类吗?抱歉,Java 中的枚举不能继承类。我刚才解释了它是一种类型,就像 Java 中的类或接口一样,所以不要感到惊讶。这就是为什么前面的 Enum 面试题的后续问题很好。 由于每个 Enum 默认都继承 Java.lang 的抽象基类。 由于 Java 不允许多重类继承,因此 Enum 不能继承另一个类是合乎逻辑的。由于扩展了 java.lang.Enum,所有枚举都可以访问 ordinal()、values() 和 valueOf() 等方法。 17) 如何遍历枚举的每个实例?如果您研究过 java.lang.Enum,您会知道 values() 方法返回一个包含每个枚举常量的数组。每个枚举类型都会收到这个 values() 方法,因为它们都隐式地继承了 java.lang.Enum。您可以通过使用此方法来遍历特定类型的所有枚举常量。此处提供使用 values() 和 foreach 循环迭代 Java 枚举值的示例。 18) 使用 Enum 作为 Singleton 有哪些优缺点?Enum 是实现 Singleton 设计模式的一种便捷的捷径,并且自 Effective Java 提及以来,它越来越受欢迎。 Enum Singleton 最初看起来非常有前景,并且为您处理了很多事情,例如受控的实例生成、序列化安全,最重要的是,使用 Enum 创建线程安全的 Singleton 非常简单。双重检查锁定和易变变量不再是问题。此处讨论了在 Java 中使用 Enum 作为 Singleton 的优缺点。 19) Enum 模式与 Enum Int 模式和 Enum String 模式有什么区别?如果您有五年以上的编程经验,并且使用过 JDK 1.3 和 1.4,您一定熟悉 Enum String 和 Enum Int 模式,我们使用 public static final 常量来表示一组固定数量的已知项,例如 DayOfWeek。 这种策略存在许多问题,例如缺乏特定的枚举类型。它将一周中的天数表示为 String 变量,允许任何可能的值。编译器不会限制 enum int 模式可以接受的值。 20) 如何在 Java 中将 String 转换为 Enum?考虑到 String 和 Enum 在 Java 应用程序开发中的普遍性,这是一个常见问题。在 Enum 内部声明一个接受 String 参数并返回 Enum 的工厂函数是转换 Enum 到 String 的最佳方法。您也可以选择忽略该情况。有关在 Java 中将 String 转换为 Enum 的代码示例,请参见此处。 |
我们请求您订阅我们的新闻通讯以获取最新更新。