JAVA基礎加強之列舉
阿新 • • 發佈:2019-02-06
列舉是啥?
在學習交通燈跟銀行排程系統的時候,裡面都用到了列舉~起初並不理解列舉的用法,後總結覺得列舉是...這樣說吧,一個星期有七天,這樣我們就弄個星期類,但是建立物件的時候,我們可以隨意的建立星期幾的,或者不是星期的星期例項物件,這樣就很不安全,很混亂,那就使用列舉~在裡面定義好有多少個這個類的例項物件,只能使用這些的例項物件.就像視訊裡舉例一樣:
首先是用普通類的方式來實現列舉的功能的話,形式會是:
列舉類的話形式會是: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);
}
}
最後還有一點就是,當列舉只有一個成員時,就可以作為一種單例的實現方式.!!!