Java枚举类型与数组的深入解析
立即解锁
发布时间: 2025-08-17 02:35:29 阅读量: 13 订阅数: 22 


Java编程基础与SCJP认证指南
### Java枚举类型与数组的深入解析
#### 1. 枚举类型基础
在 Java 里,枚举类型是一种特殊的数据类型,它允许开发者定义一组具名的常量。枚举类型是 `java.lang.Enum` 抽象类的子类,所以它具备 `Comparable` 和 `Serializable` 特性。
##### 1.1 枚举类型的声明
枚举类型既可以作为顶级类型声明,也能嵌套在其他静态成员或顶级类型声明中。当嵌套时,它会隐式地成为静态类型,并且可以用 `static` 关键字声明。示例如下:
```java
public class MealPrices {
public enum Day { /* ... */ }
public static enum Meal { /* ... */ }
public static void main(String[] args) { /* ... */ }
}
```
##### 1.2 枚举类型的特性
- **不可显式扩展**:不能使用 `extends` 子句显式扩展枚举类型。除非包含特定常量类体,否则枚举类型隐式为 `final` 类型。即便包含特定常量类体,也不能显式声明为 `final`。
- **不能声明为抽象类型**:无论每个抽象方法是否在每个枚举常量的特定常量类体中被重写,枚举类型都不能声明为抽象类型。
- **可实现接口**:和类一样,枚举类型能够实现接口。例如:
```java
public interface ITimeInfo {
public int getHour();
public int getMins();
}
public enum Meal implements ITimeInfo {
// ...
public int getHour() { return this.hh; }
public int getMins() { return this.mm; }
}
```
- **特殊集合实现**:Java 集合框架为枚举类型提供了特殊用途的集合实现(`java.util.EnumSet`)和映射实现(`java.util.EnumMap`),相较于通用实现,它们能为枚举类型提供更优性能。
#### 2. 枚举类型的方法使用
在示例 3.6 中,`mealPrice()` 方法的声明展示了不同比较枚举常量的方式:
- 使用 `equals()` 方法和 `==` 运算符比较枚举常量是否相等。
- 在 `switch` 语句里使用枚举常量,注意 `switch` 语句中的 `case` 标签是枚举常量名,无需枚举类型名。
- 使用 `compareTo()` 方法比较枚举常量。
同时,示例 3.6 还说明了枚举类型的 `name()` 和 `toString()` 方法的差异:
- `name()` 方法总是精确打印枚举常量声明时的名称。
- `toString()` 方法的执行取决于 `Enum` 类中的 `toString()` 方法是否被重写,只有 `BREAKFAST` 和 `LUNCH` 枚举常量的特定常量类体重写了该方法。
#### 3. 枚举类型的构造函数与初始化
枚举类型可以定义构造函数,示例如下:
```java
public enum Drill {
ATTENTION("Attention!"), EYES_RIGHT("Eyes right!"),
EYES_LEFT("Eyes left!"), AT_EASE("At ease!");
private String command;
Drill(String command) {
this.command = command;
}
public static void main(String[] args) {
System.out.println(ATTENTION);
System.out.println(AT_EASE);
}
}
```
在这个例子中,`Drill` 枚举类型定义了一个构造函数,用于初始化每个枚举常量的 `command` 属性。
#### 4. 枚举类型的常见问题解答
以下是一些关于枚举类型的常见问题及解答:
| 问题编号 | 问题描述 | 正确答案 |
| ---- | ---- | ---- |
| 3.7 | 关于枚举类型的哪些陈述是正确的?(选三个正确答案) | (a) 枚举类型是 `java.lang.Enum` 抽象类的子类,因此它是 `Comparable` 和 `Serializable` 的。(b) 枚举类型可以实现接口。(d) 枚举类型可以定义构造函数。 |
| 3.8 | 编译并运行以下代码会有什么结果? | (d) 代码编译并打印:<br>ATTENTION<br>AT_EASE |
| 3.9 | 编译并运行以下代码会有什么结果? | (c) 代码编译并打印:<br>[LOW, TWO, NORMAL, FOUR, HIGH] |
| 3.10 | 关于以下程序的哪个陈述是正确的? | (d) 枚举类型可以声明抽象方法,但每个枚举常量必须提供实现。 |
| 3.11 | 编译并运行以下代码会有什么结果? | (c) 代码不会编译,因为枚举类型不能被实例化。 |
| 3.12 | 以下哪个代码插入到指定位置会使程序打印 `C`?(选两个正确答案) | (a) `public char getGrade() { return grade; }` (d) `abstract public char getGrade();` |
| 3.13 | 以下哪个代码插入到指定位置会使程序打印 `true`?(选四个正确答案) | (c) `Scale3.GOOD.getGrade().compareTo(Scale3.Grade.A) > 0` (e) `Scale3.GOOD.getGrade() instanceof Scale3.Grade` (f) `Scale3.GOOD instance
0
0
复制全文
相关推荐










