<pre name="code" class="java">package EnumTest;
enum enumTest // 枚舉類型與class用法類似
{
Mon ( 1 , "Monday" ) , Tue ( 2 , "Tuesday" ) , Wed ( 3 , "Wednesday" ) , Thu (
4 , "Thursday" ) , Fri ( 5 , "Friday" ) , Sat ( 6 , "Saturday" ) , Sun (
7 , "Sunday" );
private int intDay;
private String strDay;
public void setStrDay ( String strDay )
{
this.strDay = strDay;
}
public String getStrDay ( )
{
return strDay;
}
public void setIntDay ( int intDay )
{
this.intDay = intDay;
}
public int getIntDay ( )
{
return intDay;
}
private enumTest ( int i , String day ) // 必須有一個只含參的構造方法
{
this.setStrDay( day );
this.setIntDay( i );
}
public static void printDay ()
{
for ( enumTest i : enumTest.values( ) )
{
switch ( i.getIntDay( ) )
{
case 1 :
System.out.println( enumTest.Mon );
break;
case 2 :
System.out.println( enumTest.Tue );
break;
case 3 :
System.out.println( enumTest.Wed );
break;
case 4 :
System.out.println( enumTest.Thu );
break;
case 5 :
System.out.println( enumTest.Fri );
break;
case 6 :
System.out.println( enumTest.Sat );
break;
case 7 :
System.out.println( enumTest.Sun );
break;
default :
System.out.println( "wrong number!" );
}
}
enumTest et = enumTest.Fri;
System.out.println( "本枚舉所在循序爲:" + et.ordinal( ) );
}
public static void main ( String[ ] args )
{
printDay( );
}
}
運行結果爲:
Mon
Tue
Wed
Thu
Fri
Sat
Sun<pre name="code" class="plain">本枚舉所在循序爲:4
實際上,enum聲明的就是一個類,jvm將enum類型的聲明也編譯爲enumTest.class。 而這些類都是類庫中Enum類的子類(java.lang.Enum<E>)。它們繼承了這個Enum中的許多有用的方法。
枚舉類的類型爲public final,定義的枚舉變量的類型爲public static final
枚舉類的聲明必須定義構造方法,使用private修飾。這樣可以保證外部代碼無法新構造枚舉類的實例。一般一個枚舉中有幾個參數,就定義幾個需要封裝的變量。枚舉類的方法和數據域可以允許外部訪問。
枚舉可以繼承的方法:
- ordinal()方法: 返回枚舉值在枚舉類種的順序。這個順序根據枚舉值聲明的順序而定。
- compareTo()方法: Enum實現了java.lang.Comparable接口,因此可以比較象與指定對象的順序。Enum中的compareTo返回的是兩個枚舉值的順序之差。當然,前提是兩個枚舉值必須屬於同一個枚舉類,否則會拋出ClassCastException()異常。(具體可見源代碼)
- values()方法: 靜態方法,返回一個包含全部枚舉值的數組。
- toString()方法: 返回枚舉常量的名稱。
- valueOf()方法: 這個方法和toString方法是相對應的,返回帶指定名稱的指定枚舉類型的枚舉常量。
- equals()方法: 比較兩個枚舉類對象的引用。