JDK5新特性:枚举(Enum)
2015-08-06 13:49
405 查看
一、枚举的概述。
枚举,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。回想单例设计模式:单例类是一个类只有一个实例
那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例。这才能是枚举类。
二、枚举类的常用方法。
int compareTo(E o)比较此枚举与指定对象的顺序。
String name()
返回此枚举常量的名称,在其枚举声明中对其进行声明。
int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String toString()
返回枚举常量的名称,它包含在声明中。
T valueOf(Class type,String name)
返回带指定名称的指定枚举类型的枚举常量。
values()
此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便。
三、枚举的使用。
package com.hkddy8.demo1; /* * 手动定义枚举类 */ public class EunmDemo { public static void main(String[] args) { //测试 Lamp l1 = Lamp.RED; System.out.println(l1); Lamp l2 = Lamp.GREEN; System.out.println(l2); Lamp l3 = Lamp.YELLW; System.out.println(l3); // 打印的都是地址值 } } class Lamp{ // 私有化构造方法让外界不能无限的去创建对象 private Lamp(){} // 创建几个实例,用于创建对象 public static final Lamp RED = new Lamp(); public static final Lamp GREEN = new Lamp(); public static final Lamp YELLW = new Lamp(); }
由于自己定义一个枚举类,比较麻烦,所以java就提供了枚举类供我们使用。
java.lang包下的 Enum类
格式是:只有枚举项的枚举类
public enum 枚举类名 {
枚举项1,枚举项2,枚举项3…;
}
代码体现:
public enum TrafficLamp { // 枚举项 RED, GREEN, YELLW; }
// 测试类 public class TrafficLampTest { public static void main(String[] args) { TrafficLamp t1 = TrafficLamp.RED; System.out.println(t1); TrafficLamp t2 = TrafficLamp.GREEN; System.out.println(t2); TrafficLamp t3 = TrafficLamp.YELLW; System.out.println(t3); // 打印的是枚举项常量的名称,说明Enum类重写了toString方法 } }
带参构造的使用:
public enum TrafficLamp { // 枚举项 RED(30), GREEN(40), YELLW(5); private int time; // 提供带参构造 private TrafficLamp(int time){ this.time = time; } public int getTime(){ return time; }
// 测试类 public class TrafficLampTest { public static void main(String[] args) { TrafficLamp t1 = TrafficLamp.RED; System.out.println(t1); System.out.println(t1.getTime()); TrafficLamp t2 = TrafficLamp.GREEN; System.out.println(t2); System.out.println(t2.getTime()); TrafficLamp t3 = TrafficLamp.YELLW; System.out.println(t3); System.out.println(t3.getTime()); } }
抽象方法的使用:
public enum TrafficLamp { // 枚举项 RED(30) { @Override public TrafficLamp nextLamp() { return TrafficLamp.GREEN; } }, GREEN(40) { @Override public TrafficLamp nextLamp() { return TrafficLamp.YELLW; } }, YELLW(5) { @Override public TrafficLamp nextLamp() { return TrafficLamp.RED; } }; private int time; // 提供带参构造 private TrafficLamp(int time){ this.time = time; } public int getTime(){ return time; } // 提供一个抽象方法,用于获取下个灯 public abstract TrafficLamp nextLamp(); }
// 测试类 public class TrafficLampTest { public static void main(String[] args) { TrafficLamp t1 = TrafficLamp.RED; // 调用方法 TrafficLamp l1 = t1.nextLamp(); System.out.println(l1); TrafficLamp t2 = TrafficLamp.GREEN; // 调用方法 TrafficLamp l2 = t2.nextLamp(); System.out.println(l2); TrafficLamp t3 = TrafficLamp.YELLW; // 调用方法 TrafficLamp l3 = t3.nextLamp(); System.out.println(l3); //打印结果 // GREEN // YELLW // RED } }
四、使用枚举的注意事项。
定义枚举类要用关键字enum所有枚举类都是Enum的子类
枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);
枚举类也可以有抽象方法,但是枚举项必须重写该方法
枚举在switch语句中的使用
相关文章推荐
- JAVA正则表达式-捕获组与非捕获组
- Spring.Net学习笔记六(依赖对象的注入)
- JAVA反射机制
- java.lang.UnsupportedClassVersionError Bad version spring 框架异常,为JAVAEE配置1.7的jdk就行了。
- Java开发环境的配置
- Eclipse的安装
- win7 下面如何搭建Scala ——Eclipse开发环境
- dubbo 解决Multicast java.net.SocketException: No such device
- java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
- 【Java设计模式】· 职责链模式(Chain of Responsibility)
- java中的数组复制
- java 中的 & | ~ ^ 运算符分析
- spring 事务详解
- java项目转web项目
- Java检测端口的占用情况
- java泛型入门
- Java自定义注解基础知识
- java中关于十进制数左移,右移,无符号右移问题解决
- Dubbo java.io.IOException: Can not lock the registry cache file
- 很详细的:java中文数字转换成阿拉伯数字