Java JDK 1.5新特性深度解析:枚举类型(Enum)
"这篇文章主要介绍了JDK 1.5引入的新特性——枚举类型(Enum),它是Java语言中的一种特殊类,具有特定的特性和功能。" 在JDK 1.5版本中,Sun Microsystems引入了一个新的关键字`enum`,用于创建枚举类型。枚举类型是一种特殊的类,它可以有自己的变量、方法,并且可以实现一个或多个接口。以下是对`enum`特性的详细说明: 1. **声明与实例化**: - 定义一个枚举类型的语法是`public enum 枚举名 {枚举值1, 枚举值2, ...}`。例如,`public enum Color {Red, Green, Blue}`。 - 每个枚举值都是该枚举类型的静态、公共和最终常量,这意味着它们可以在不创建枚举实例的情况下直接访问,如`Color.Red`。 2. **自动实现Comparable接口**: - `enum`默认实现了`java.lang.Comparable`接口,这意味着枚举实例之间可以进行比较。可以通过`compareTo()`方法比较它们的顺序,通常这个顺序是根据它们在枚举中声明的顺序来确定的。 3. **toString()方法**: - 每个枚举实例都有一个内置的`toString()`方法,它返回枚举值的名称。例如,`Color.Blue.toString()`将返回字符串"Blue"。 4. **valueOf()方法**: - 提供了`valueOf()`静态方法,可以将字符串转换为对应的枚举值,如`Color.valueOf("Blue")`会返回`Color.Blue`。 5. **values()方法**: - 通过`values()`方法可以获取枚举类型的全部枚举值数组。例如,`Color.values()`将返回包含所有颜色的数组,可以遍历这些值。 6. **ordinal()方法**: - `ordinal()`方法返回枚举值的索引,这个索引基于它们在枚举中声明的顺序。例如,`Color.Red.ordinal()`返回0,表示`Red`是`Color`枚举中的第一个元素。 7. **枚举的扩展**: - 枚举类型可以添加额外的方法和属性。例如,我们可以为`Color`枚举添加一个`getRandomColor()`方法,以随机返回枚举的一个值。 8. **枚举方法覆盖**: - 当覆盖枚举的`toString()`、`valueOf()`等方法时,需要特别注意,因为它们已经由编译器自动处理。如果自定义了`toString()`,确保它符合预期的行为,否则可能会影响到其他依赖这些方法的代码。 9. **枚举集合操作**: - 可以使用`Arrays.asList()`或`Stream` API对枚举值进行集合操作,如`List<Color> colors = Arrays.asList(Color.values());`,然后可以使用`forEach()`等方法遍历枚举值。 枚举类型在Java中提供了更安全、更类型化的常量表示,避免了使用传统的`public static final`常量所带来的潜在问题,如命名冲突和类型转换错误。枚举类型在设计模式、框架以及许多其他场景中都有广泛的应用。
public enum Color {
Red,
Green,
Blue;
}
Enum是Sun全新引进的一个关键字,看起来很象是特殊的class,它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。在声明一个enum类型时,应该注意到enum类型有如下的一些特征:
1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例;
2.所有枚举值都是public , static , final的。(注意:这一点只是针对于枚举值,我们可以和在普通类里面定义变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。);
3.Enum默认实现了java.lang.Comparable接口;
4.Enum重载了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”;
5.Enum提供了一个valueOf方法,它和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue。因此在重写toString方法的时候就要注意到这一点,一般来说应该相对应地重写valueOf方法;
6.Enum还提供了values方法,该方法可以方便的遍历所有的枚举值;
7.Enum还有一个oridinal的方法,该方法返回枚举值在枚举类中的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。
了解了这些基本特性,我们来看看如何使用它们。
for (Color c: Color.values())
System.out.println(“find value:” + c);
2.在enum中定义方法和变量,比如我们可以为Color增加一个方法随机返回一个颜色。
public enum Color {
Red,
Green,
Blue;
/*
*定义一个变量表示枚举值的数目。
*(我有点奇怪为什么sun没有给enum直接提供一个size方法).
*/
private static int number = Color.values().length ;
/**
* 随机返回一个枚举值
剩余7页未读,继续阅读
- 粉丝: 1
- 资源: 116
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦