所有的Java枚举类型都继承自该抽象类。我们用关键字enum来声明枚举类型,不可以通过显式继承该抽象类的方式来声明。
public abstract class Enum<E extends Enum<E>>
implements Comparable<E>, Serializable {
private final String name;
// 当前枚举常量名称
public final String name() {
return name;
}
private final int ordinal;
// 当前枚举常量次序,从0开始
public final int ordinal() {
return ordinal;
}
// 专有构造器,我们无法调用。该构造方法用于由响应枚举类型声明的编译器发出的代码。
protected Enum(String name, int ordinal) {
this.name = name;
this.ordinal = ordinal;
}
// 返回枚举常量的名称,默认是返回name值。可以重写该方法,输出更加友好的描述。
public String toString() {
return name;
}
// 比较当前枚举常量是否和指定的对象相等。因为枚举常量是单例的,所以直接调用==操作符。子类不可以重写该方法。
public final boolean equals(Object other) {
return this==other;
}
// 返回该枚举常量的哈希码。和equals一致,该方法不可以被重写。
public final int hashCode() {
return super.hashCode();
}
// 因为枚举常量是单例的,所以不允许克隆。
protected final Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
// 比较该枚举常量和指定对象的大小。它们的类型要相同,根据它们在枚举声明中的先后顺序来返回大小(前面的小,后面的大)。子类不可以重写该方法
public final int compareTo(E o) {
Enum other = (Enum)o;
Enum self = this;
if (self.getClass() != other.getClass() && // optimization
self.getDeclaringClass() != other.getDeclaringClass())
throw new ClassCastException();
return self.ordinal - other.ordinal;
}
// 得到枚举常量所属枚举类型的Class对象
public final Class<E> getDeclaringClass() {
Class clazz = getClass();
Class zuper = clazz.getSuperclass();
return (zuper == Enum.class) ? clazz : zuper;
}
// 返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。不允许使用额外的空白字符。
public static <T extends Enum<T>> T valueOf(Class<T> enumType,
String name) {
T result = enumType.enumConstantDirectory().get(name);
if (result != null)
return result;
if (name == null)
throw new NullPointerException("Name is null");
throw new IllegalArgumentException(
"No enum const " + enumType +"." + name);
}
// 不允许反序列化枚举对象
private void readObject(ObjectInputStream in) throws IOException,
ClassNotFoundException {
throw new InvalidObjectException("can't deserialize enum");
}
// 不允许反序列化枚举对象
private void readObjectNoData() throws ObjectStreamException {
throw new InvalidObjectException("can't deserialize enum");
}
// 枚举类不可以有finalize方法,子类不可以重写该方法
protected final void finalize() { }
}
分享到:
相关推荐
在这个“enum 结构分析源码”资源中,我们主要关注的是C语言中的枚举使用和实现。C语言中的enum并不是一种真正的类型,而是对整型变量的一种别名,它提供了更易读的常量名称。 首先,我们来看`enum.c`这个源文件。...
3. 枚举源码分析: Java枚举的源码实现中,每个枚举实例都是类的一个静态常量,存储在类的静态域中。`Enum`类提供了许多用于操作枚举的内置方法,如`name()`返回枚举常量的名称,`compareTo()`比较枚举实例的顺序等...
通过深入学习和实践这些源码,读者不仅可以掌握Java编程的基本技能,还能提升分析问题和解决问题的能力。在实际工作中,这样的实践经验将极大地提高编程效率和代码质量。所以,这个压缩包是一份非常宝贵的资料,值得...
通过分析和学习这个源码,我们可以深入了解Java游戏开发的基础知识,以及如何使用Java来创建交互式的娱乐应用程序。 首先,Java作为一款跨平台的编程语言,具有丰富的类库和强大的性能,适合开发各种类型的游戏。在...
在Java编程领域,创建一个日历应用是一项常见的练习,它能帮助开发者巩固基础并实践面向...通过分析和理解源码,开发者不仅可以了解如何创建一个实用的日历应用,还能深入理解Java的图形用户界面设计和时间日期操作。
本资源"Java源码查看枚举类型定义.rar"包含了关于Java枚举类型的详细解释和实例,旨在帮助开发者深入理解这一特性。 首先,枚举类型在Java中通过关键字`enum`声明。例如: ```java public enum Color { RED, ...
学习和分析这样的源码可以帮助提升Java编程技能,理解实际项目中的编程实践,同时也可以借鉴优秀代码的编写方式。对于初学者来说,这是一个了解实际项目结构和编程习惯的好机会;对于有经验的开发者,它可以提供新的...
源码中可能会有枚举(Enum)或类来表示这些状态。 8. **游戏逻辑**:源码会展示如何实现方块的生成、移动、旋转、碰撞检测、得分计算等核心逻辑。这部分涉及复杂性较高,但也是学习的重点。 9. **资源管理**:如果...
【Java贪吃蛇游戏源码解析】 在编程领域,实现一款经典的贪吃蛇游戏是学习基础编程和控制台交互的好方法。本项目是使用Java语言编写的...通过分析和理解源码,开发者可以提升自己的编程技能,同时享受游戏开发的乐趣。
源码分析: 1. **项目结构**:压缩包中的文件结构通常是Java项目的标准布局。`推箱子.iml`是IntelliJ IDEA项目的配置文件,`src`目录存放源代码,`out`目录包含编译后的字节码文件,`.idea`目录存储IDE的项目设置,...
【标题】基于Java的扫雷源码分析 在编程领域,扫雷游戏是常见的学习项目,因为它涉及到逻辑推理、二维数组操作以及用户交互等多方面的技术。本篇将深入探讨一个基于Java实现的扫雷游戏的源码,帮助读者理解Java编程...
通过分析和理解这段源码,不仅可以提高Java编程技能,还能深入理解游戏开发的基本原理。记得查看提供的"下载及使用说明.txt"来获取源码的使用指南,以及使用"查看文件解压密码(网址即为解压密码).url"提供的网址...
6. **枚举类型Enum**:解释了Java中枚举类型的用法,以及如何创建和使用枚举常量。 7. **迭代器Iterator**:阐述了迭代器接口及其作用,如何通过迭代器遍历集合。 ### 第9章:文件与流 本章关注Java中的文件操作和...
总之,"java象棋开发源码"项目涵盖了从基础编程到高级算法的多个方面,对于学习Java和游戏开发的开发者来说,是一个很好的实践和学习素材。通过分析和理解这段代码,你可以提升自己的编程能力,同时也能了解到如何将...
2. 胜负判断:AI不仅需要计算自己的胜利路径,还要防止对方形成五子连珠,因此会涉及到复杂的棋局分析。 四、资源管理 "META-INF"目录通常包含元数据,如MANIFEST.MF文件,它记录了类加载器如何查找和加载类。在...
Java贪吃蛇是一款基于Java编程语言开发的经典游戏,它的源码是学习Java基础、...通过分析Java贪吃蛇的源码,开发者不仅可以学习到上述知识点,还能深入了解如何将理论知识应用于实际项目,提升编程技能和问题解决能力。
通过学习和分析Java版的俄罗斯方块源码,不仅可以掌握基本的游戏开发流程,还能加深对Java语言的理解,提升编程技巧。此外,这种简单的项目也是实践和学习多线程、图形库(如JavaFX或Swing)以及游戏AI的好起点。 ...
《Core Java 7th Edition》是Java编程领域的一本经典著作,主要面向...通过分析和修改这些源码,可以加深对Java编程的理解,提高编程技能。对于想要深入理解Java 7的开发者来说,这本书和源码都是不可多得的学习资源。
通过阅读和分析"Java_java_源码.rar"中的源码文件,可以深入理解项目的架构、设计模式、算法和数据结构,从而提升编程技能。同时,这也是学习和研究开源项目、参与社区贡献以及解决实际问题的重要方式。
《俄罗斯方块》是一款经典的游戏,它以简单的规则和高度的可玩性赢得了全球玩家的喜爱...在分析提供的`codefans.net`文件中,很可能是包含了一个完整的《俄罗斯方块》Java源码实现,可以从代码中学习到实际的应用示例。