1. 程式人生 > >JAVA基礎加強之列舉

JAVA基礎加強之列舉

列舉是啥?

在學習交通燈跟銀行排程系統的時候,裡面都用到了列舉~起初並不理解列舉的用法,後總結覺得列舉是...這樣說吧,一個星期有七天,這樣我們就弄個星期類,但是建立物件的時候,我們可以隨意的建立星期幾的,或者不是星期的星期例項物件,這樣就很不安全,很混亂,那就使用列舉~在裡面定義好有多少個這個類的例項物件,只能使用這些的例項物件.就像視訊裡舉例一樣:

首先是用普通類的方式來實現列舉的功能的話,形式會是:

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);
	}
}


最後還有一點就是,當列舉只有一個成員時,就可以作為一種單例的實現方式.!!!