枚举是啥?
在学习交通灯跟银行调度系统的时候,里面都用到了枚举~起初并不理解枚举的用法,后总结觉得枚举是...这样说吧,一个星期有七天,这样我们就弄个星期类,但是创建对象的时候,我们可以随意的创建星期几的,或者不是星期的星期实例对象,这样就很不安全,很混乱,那就使用枚举~在里面定义好有多少个这个类的实例对象,只能使用这些的实例对象.就像视频里举例一样:
首先是用普通类的方式来实现枚举的功能的话,形式会是:
public class WeekDay2 {枚举类的话形式会是:
private WeekDay2(){}
public final static WeekDay2 星期一 =new WeekDay2();
public final static WeekDay2 星期二 =new WeekDay2();
public final static WeekDay2 星期三 =new WeekDay2();
public void NextDay()
{
int i=0;
if(this==星期一){i=0;}
if(this==星期二){i=1;}
if(this==星期三){i=2;}
switch(i)
{
case 0:System.out.println("下周是星期二");break;
case 1:System.out.println("下周是星期三");break;
case 2:System.out.println("下周是星期四");break;
}
}
}
public enum WeekDay {主方法程序:
星期一,星期二,星期三,星期四,星期五,星期六,星期日;
public void NextDay()
{
switch(this)
{
case 星期一:System.out.println("下个星期是星期二");break;
case 星期二:System.out.println("下个星期是星期三");break;
case 星期三:System.out.println("下个星期是星期四");break;
case 星期四:System.out.println("下个星期是星期五");break;
case 星期五:System.out.println("下个星期是星期六");break;
case 星期六:System.out.println("下个星期是星期日");break;
case 星期日:System.out.println("下个星期是星期一");break;
}
}
}
public class EumTest {显示结果为:
public static void main(String[] args) {
WeekDay.星期一.NextDay();
WeekDay2.星期二.NextDay();
}
}
在枚举里,有一些地方是需要注意的.
一个是枚举的构造方法,
枚举的构造方法一定是私有的~所以就算要覆盖,或重载也要弄成私有的!!!
还有就是枚举的构造方法,弄成有参构造方法,其应用如下面例子(其实在交通灯里程序讲过);
就是把前面的程序简单话的话,在创建对象的时候就定义好下周是星期几的话,就简单多了.
public enum WeekDay {
//------这个一定要在开头-------------------------------------
星期一("星期二"),星期二("星期三"),星期三("星期四"),
星期四("星期五"),星期五("星期六"),星期六("星期日"),星期日("星期一");
//-------------------------------------------------------------
String Next=null;
public void NextDay()
{
System.out.println("下周是"+Next);
}
//构造方法
private WeekDay(String Next)
{
this.Next=Next;
}
}
一个是带有抽象方法的枚举
如下面程序:
注意,用大括号括起抽象方法的覆盖方法.
public enum WeekDay3 {
星期一("星期二"){
public WeekDay3 doing()
{
System.out.println("今天上课");
return 星期一;
}
},
星期二("星期三"){
public WeekDay3 doing()
{
System.out.println("今天上课");
return 星期二;
}
},
星期三("星期四"){
public WeekDay3 doing()
{
System.out.println("今天上课");
return 星期三;
}
},
星期四("星期五"){
public WeekDay3 doing()
{
System.out.println("休息");
return 星期四;
}
},
星期五("星期六"){
public WeekDay3 doing()
{
System.out.println("休息");
return 星期五;
}
};
String Next=null;
public abstract WeekDay3 doing();//抽象方法
private WeekDay3(String Next)
{
this.Next=Next;
}
public void NextDay()
{
System.out.println("下周是"+Next);
}
}
最后还有一点就是,当枚举只有一个成员时,就可以作为一种单例的实现方式.!!!