您的位置:首页 > 其它

高新技术枚举

2013-10-21 19:51 169 查看
---------------------- android培训java培训、期待与您交流!
----------------------

1:为什么要用枚举

比如定义星期,比如定义季节:

举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。

枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标

2:枚举 每一枚举都是一个对象

枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

带构造方法的枚举

构造方法必须定义成私有的

如果有多个构造方法,该如何选择哪个构造方法?

枚举元素MON和MON()的效果一样,都是调用默认的构造方法。

带方法的枚举

定义枚举TrafficLamp

实现普通的next方法

实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。

增加上表示时间的构造方法

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

3:用普通的java 类来实现枚举:

package en.itcast.java.tools;

public class WeekDay {

private WeekDay(){}

public final static WeekDay Sun = new WeekDay();
public final static WeekDay Mon = new WeekDay();

public WeekDay nextDay()
{
if(this == Sun)
{
return Mon;
}
else
{
return Sun;
}
}

public String toString()
{
return this==Sun? "Sun":"Mon";
}

}


以上只定义了 Sun 和 Mon 两个星期

可以继续完善整个星期。

以下:

采用抽象的方法定义nextDay

package en.itcast.java.tools;

public abstract class WeekDay {

private WeekDay(){}

public final static WeekDay Sun = new WeekDay(){
public WeekDay nextDay() {
return Mon;
}
};
public final static WeekDay Mon = new WeekDay()
{
public WeekDay nextDay() {
return Sun;
}
};

public  abstract WeekDay nextDay();

public String toString()
{
return this==Sun? "Sun":"Mon";
}

}

分析: 采用抽象的方法定义nextDay 就可以将大量的if else 语句转移成了一个个独立的类。

4:用java提供的enum 定义枚举

enum WeekDD
{
SUN,MON,TUE,WED,THI,FRI,SAT
}


应用如下:

WeekDD  wd = WeekDD.FRI;

System.out.println(wd);
System.out.println(wd.name());
System.out.println(wd.ordinal());
System.out.println(wd.getClass().toString());
System.out.println(WeekDD.valueOf("SUN"));

for(WeekDD bbb : WeekDD.values())
{
System.out.println(bbb);
}


5: 带构造函数的枚举

enum WeekDD
{
SUN(1),MON(),TUE,WED,THI,FRI,SAT;

private WeekDD() {
System.out.println("first");
};
private WeekDD(int day){
System.out.println("second");
}
}


6: 带有抽象函数的枚举

也是最复杂的枚举

enum TranF
{
RED(30) {
@Override
public TranF nextLamp() {
return GREEN;
}
},
GREEN(45) {
@Override
public TranF nextLamp() {
return YELLOW;
}
},
YELLOW(5) {
@Override
public TranF nextLamp() {
return RED;
}
};

public abstract TranF nextLamp();

private int time;

private TranF(int time)
{
this.time = time;
}
}


说明: 如果枚举只有一个成员时,就可以作为一中单例的实现形式。

------------- java培训android培训、java博客、java学习型技术博客、期待与您交流! -------------

详情请查看:http://edu.csdn.net/heima/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: