枚举是JDK 1.5之后增加的一个主要新功能,利用枚举可以简化多例设计模式(一个类只能够产生固定几个实例化对象)的定义,同时在Java中的枚举也可以像普通类那样定义属性、构造方法、实现接口等
Ø 枚举主要用于定义一组可以使用的类对象,这样在使用时只能够使用固定的几个对象来进行类的操作。这样的操作形式在实际生活中非常的多:
Ø 如果要表示日期的对象,那么只能够有以下几种定义:SUNDAY(星期日)、MONDAY(星期一)、TUESDAY(星期二)、WEDNESDAY(星期三)、THURSDAY(星期四)、FRIDAY(星期五)、SATURDAY(星期六);
Ø 从JD K1.5开始,专门提供了一个新的关键字:enum,利用enum关键字就可以定义枚举类型。
定义颜色的枚举类
enum Color { // 定义枚举类
RED, GREEN, BLUE; // 表示此处为实例化对象
}
public class TestDemo {
public static void main(String[] args) {
Color red = Color.RED; // 直接取得枚举对象
System.out.println(red);
}
}
Enum类
枚举只需要使用enum关键字就可以定义,但是严格来讲,枚举只是类结构的加强而已。因为在Java中使用enum定义的枚举类就相当于默认继承了java.lang.Enum类,此类定义如下
public abstract class Enum<Eextends Enum<E>>
extends Object
implements Comparable<E>,Serializable
Enum类定义的方法
返回枚举中的全部内容
enum Color { // 定义枚举类
RED, GREEN, BLUE; // 表示此处为实例化对象
}
public class TestDemo {
public static void main(String[] args) {
for(Color c : Color.values()) {
System.out.println(c.ordinal() + " - " + c.name());
}
}
}
程序执行结果:
0 - RED
1 - GREEN
2 – BLUE
枚举中定义其它结构
Ø 按照之前所理解,枚举就属于多例设计模式,那么既然是多例设计模式,对于类之中就肯定有多种组成,包括属性、方法、构造方法,在枚举之中也同样可以定义以上的内容,但是此处需要注意两点问题:
Ø 枚举之中定义的构造方法不能够使用public声明,如果没有无参构造,请手工调用构造传递参数;
Ø 枚举对象必须要放在首行,随后才可以定义属性、构造、普通方法等结构。
扩充枚举功能
enum Color {
RED("红色"), GREEN("绿色"), BLUE("蓝色"); // 定义枚举对象,必须写在首行
private String title; // 属性
private Color(String title) { // 构造方法,不能使用public声明
this.title = title;
}
public String toString() { // 覆写toString()方法
return this.title;
}
}
public class TestDemo {
public static void main(String[] args) {
for (Color c : Color.values()) { // 取得全部枚举对象
System.out.print(c + "、"); // 直接输出对象调用toString()
}
}
}
枚举实现接口
interface IMessage {
public String getTitle() ;
}
enum Color implements IMessage { // 实现接口
RED("红色"), GREEN("绿色"), BLUE("蓝色"); // 定义枚举对象,都是IMessage接口实例
private String title; // 属性
private Color(String title) { // 构造方法,不能使用public声明
this.title = title;
}
public String getTitle() { // 覆写方法
return this.title ;
}
public String toString() { // 覆写toString()方法
return this.title;
}
}
public class TestDemo {
public static void main(String[] args) {
IMessage msg = Color.RED ; // 实例化接口对象
System.out.println(msg.getTitle());
}
}
在switch语句上使用枚举
enum Color {
RED, GREEN, BLUE;
}
public class TestDemo {
public static void main(String[] args) {
Color c = Color.RED;
switch (c) { // 支持枚举判断
case RED: // 判断枚举内容
System.out.println("这是红色!");
break;
case GREEN: // 判断枚举内容
System.out.println("这是绿色!");
break;
case BLUE: // 判断枚举内容
System.out.println("这是蓝色!");
break;
}
}
}
在类设计结构中使用枚举
enum Sex {
MALE("男"),FEMALE("女") ;
private String title ;
private Sex(String title) {
this.title = title ;
}
public String toString() {
return this.title ;
}
}
class Member {
private String name ;
private int age ;
private Sex sex ; // 定义性别属性
public Member(String name,int age,Sex sex) {
this.name = name ;
this.age = age ;
this.sex = sex ;
}
public String toString() {
return "姓名:" + this.name + ",年龄:" + this.age + ",性别:" + this.sex ;
}
}
public class TestDemo {
public static void main(String[] args) {
System.out.println(new Member("ww", 19, Sex.MALE));
}