您的位置:首页 > 职场人生

基础加强_枚举类型Enum

2013-01-14 17:13 239 查看
  -------
android培训、java培训、期待与您交流! ---------- 

枚举:

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个。
/*
* 用普通类实现枚举功能,定义一个WeekDay1类实现枚举功能
*
* 私有的构造方法
* 每个元素分别用一个公有的静态成员变量表示
* 可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
*/
public abstract class WeekDay1 {
//私有构造方法
private WeekDay1(){}

//每个元素分别用一个公有的类变量表示
public final static WeekDay1 SUN = new WeekDay1(){
@Override
public WeekDay1 nextDay() {
return MON;
}
};
public final static WeekDay1 MON = new WeekDay1(){
@Override
public WeekDay1 nextDay() {
return SUN;
}
};
//采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
public abstract WeekDay1 nextDay();
/* {
* 	判断并返回this的下一个类
* }
*/

//定义通过get获取的方法
public static WeekDay1 getWeekDay(int i){
switch (i){
case 1: return MON;
case 0: return SUN;
default : return null;
}
}
public String toString(){
return this==SUN?"SUN":"MON";
}
}

枚举类:

enum 关键字,和class、interface相同,用来定义枚举类。

1、枚举类可以实现一个或多个接口,默认继承java.lang.Enum类,而不是Object类,并且Enum类实现了Serializable和Comparable接口;

2、使用enum定义非抽象的枚举类默认会使用final修饰,不能派生子类。

   如果枚举类包含抽象方法,默认为抽象类,可以派生子类,即可有枚举实例来实现抽象方法(匿名内部类)。

3、枚举类构造方法默认为private并且只能是private;

4、枚举类的实例必须在第一行显式列出,这些实例自动是public static final。如果不在第一行,编译器报错。

当枚举只有一个成员时,就可以作为一种单例的实现方式。

java.AWT.Color

采用抽象方法定义

枚举示例

public class EnumTest {
public static void main(String[] args) {
// 测试手动实现的枚举类
WeekDay1 weekDay1 = WeekDay1.MON;
System.out.println(weekDay1.nextDay());
//测试枚举类
WeekDay weekDay = WeekDay.FRI;
System.out.println(weekDay);
System.out.println(weekDay.name());
//int ordinal()  返回枚举常量的序数
System.out.println(weekDay.ordinal());
//valueOf("xx")和values()方法时枚举类生成字节码文件时自动添加的。
//valueOf()返回该枚举类的指定的枚举常量
System.out.println(WeekDay.valueOf("SUN").toString());
//values()返回枚举数组,数组包含枚举所有的元素
System.out.println(WeekDay.values().length);
}
//定义一个WeekDay内部类,该类为枚举类
public enum WeekDay{
//枚举值必须在第一行列出,枚举元素MON和MON()的效果一样,都是调用默认的构造方法
SUN(1),MON(),TUE,WED,THI,FRI,SAT;
//默认构造方法
private WeekDay(){System.out.println("默认");}
//带参数的构造方法
private WeekDay(int day){System.out.println("有参数");}
}
/*
定义一个交通灯枚举类;
包含nextLamp抽象方法和time属性;
将构造函数私有化。
*/
public enum TrafficLamp{
RED(30){
public  TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public  TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public  TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
//交通灯每个枚举对象带有一个时间属性
private int time;
private TrafficLamp(int time){this.time = time;}
}
}


 -------
android培训、java培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息