枚举

1.1 枚举类

一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。

例如交通灯(红、黄、绿)    性别(男、女)   星期(星期一、二、三…..)

     分数等级(ABCDE)

JDK 5新增的 enum 关键字用于定义一个枚举类。

枚举的实现

使用enum定义枚举类

在枚举类中定义枚举值(大写)

enum Gender {

MALE, FEMALE;

}

使用javap命令

 

 

发现其中每一个枚举值都是枚举类的具体实例对象.只不过是静态常量.

枚举类具有如下特性:

枚举类也是一种特殊形式的Java类。

枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数.

public class Demo1 {

public static void main(String[] args) {

Gender male = Gender.MALE;

System.out.println(male.getInfo());

}

}

 

enum Gender {

MALE(""), FEMALE;

 

// 成员变量

private String info;

 

// 构造函数

private Gender() {

 

}

 

private Gender(String info) {

this.info = info;

}

 

// 成员方法

public String getInfo() {

return info;

}

 

}

枚举类可以声明抽象方法,但是要有具体的枚举值去实现.

public class Demo1 {

public static void main(String[] args) {

Gender male = Gender.MALE;

System.out.println(male.getInfo());

male.speak();

}

}

 

enum Gender {

MALE("") {

@Override

public void speak() {

System.out.println("是男人");

}

},

FEMALE {

@Override

public void speak() {

System.out.println("是女人");

}

};

 

// 成员变量

private String info;

 

// 构造函数

private Gender() {

 

}

 

private Gender(String info) {

this.info = info;

}

 

// 成员方法

public String getInfo() {

return info;

}

 

public abstract void speak();

 

}

 

枚举类也可以实现接口(序列化)、或继承抽象类。

JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型(enum)

public class Demo2 {

public static void main(String[] args) {

WeekDay mon = WeekDay.MON;

switch (mon) {

case MON:

System.out.println("星期一要上班...");

break;

case TUE:

System.out.println("星期二,继续上班...");

break;

}

}

}

 

enum WeekDay {

MON, TUE, WED, THU, FRI, SAT, SUN;

}

 

 

若枚举类只有一个枚举值,则可以当作单态设计模式使用。

练习:

请编写一个关于星期几的枚举WeekDay,要求:枚举值:Mon,Tue,Wed,Thu,Fri,Sat,Sun 该枚举要有一个方法,调用该方法返回中文格式的星期。

enum WeekDay {

MON {

 

@Override

public String getInfo() {

 

return "星期一";

}

 

},

TUE {

@Override

public String getInfo() {

 

return "星期二";

}

},

WED {

@Override

public String getInfo() {

 

return "星期三";

}

},

THU {

@Override

public String getInfo() {

 

return "星期四";

}

},

FRI {

@Override

public String getInfo() {

 

return "星期五";

}

},

SAT {

@Override

public String getInfo() {

 

return "星期六";

}

},

SUN {

@Override

public String getInfo() {

 

return "星期天";

}

};

 

public abstract String getInfo();

}

 

posted on 2016-10-19 17:11  眼泪笑我愚昧  阅读(142)  评论(0编辑  收藏  举报

导航