一、語法
enum Size {
SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");
private Size(String abbreviation) { this.abbreviation = abbreviation; }
public String getAbbreviation() { return abbreviation; }
private String abbreviation;
}
- 枚舉類型是那些字段由一組固定常量組成的類型。常見的例子有:東南西北四個方向,星期幾等。
- 所有枚舉類型都隱式繼承java.lang.Enum類型,因爲java不支持多重繼承,所以枚舉不能繼承其他任何類。
- java對枚舉的支持是語言級的支持,switch-case結構無需加枚舉名作爲前綴。
- 多個枚舉常量之間以逗號隔開,枚舉常量列表最後可以以分號結束,如果有成員方法或成員變量,必須以分號結束。
- 枚舉類型可以有成員方法和成員變量。如果有成員方法和成員變量,枚舉常量列表要放在枚舉體最開始,以分號結尾。
- 枚舉類型的構造器必須是包級私有或者私有,構造器會自動創建枚舉類型體開端定義的枚舉常量。
二、枚舉類中常見方法
- toString()方法,默認顯示枚舉類元素名。
- Enum.valueOf(Class< T > enumType, String name)方法,通過傳入的name字符串解析出一個該枚舉類的實例,其中傳入的字符串必須是元素列表的名稱之一,否則將拋出 java.lang.IllegalArgumentException異常。
- Size.values()方法,返回一個該枚舉類的數組,其中數組的元素即爲該枚舉類中元素列表中的元素。
- ordinal()方法,返回枚舉元素實例中元素列表中的位置,起始位置爲0,該方法爲final不可覆蓋的。
- compareTo()方法,默認比較兩個元素的位置關係。
- name()方法,返回元素實列的變量名,該方法爲final不可覆蓋的,等價於toString()方法。
public class EnumTest {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in)
System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ")
String input = in.next().toUpperCase()
Size size = Enum.valueOf(Size.class, input)
Size small = Size.valueOf("SMALL")
System.out.println("size=" + size)
System.out.println("size=" + size.toString())
System.out.println("size=" + size.name())
System.out.println(Arrays.toString(Size.values()))
System.out.println("abbreviation=" + size.getAbbreviation())
if (size == Size.EXTRA_LARGE)
System.out.println("Good job–you paid attention to the _.")
}
}
三、作爲switch語句中分支結構的條件使用
switch (size) {
case SMALL:
System.out.println("S");
break;
case MEDIUM:
System.out.println("M");
break;
case LARGE:
System.out.println("L");
break;
case EXTRA_LARGE:
System.out.println("XL");
break;
default:
System.out.println(size.name());
}