接下來本章的重點來了,就是枚舉;java
枚舉是什麼?ide
Java中的枚舉是一種特殊的類,不但能夠添加字段,構造方法,普通方法,甚至能夠添加main()方法,this
爲何須要枚舉?.net
一些方法在運行時,它須要的數據不能是任意的,而必須是必定範圍內的值,此類問題在JDK5之前採用自定義帶有枚舉功能的類解決,Java5之後能夠直接使用枚舉予以解決。code
JDK 5新增的 enum 關鍵字用於定義一個枚舉類。對象
枚舉類也是一種特殊形式的Java類。繼承
枚舉類和普通類的區別:文檔
使用 enum 定義的枚舉類默認繼承了 java.lang.Enum 類get
枚舉類的構造器只能使用 private 訪問控制符it
枚舉類的全部實例必須在枚舉類中顯式列出(, 分隔 ; 結尾). 列出的實例系統會自動添加 public static final 修飾
JDK5中擴展了switch語句,它除了能夠接收int, byte, char, short外,還能夠接收一個枚舉類型
若枚舉只有一個成員, 則能夠做爲一種單例模式的實現方式
//枚舉類1(沒有參數的構造方法) package com.hbsi.enum2; public class Student { private String name; private Grade grade; public String getName() { return name; } public void setName(String name) { this.name = name; } public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } } enum Grade{ A,B,C,D,E;//無參數 } /*//手動實現枚舉類代碼 class Grade{ private Grade(){} public static final Grade A=new Grade(); public static final Grade B=new Grade(); public static final Grade C=new Grade(); public static final Grade D=new Grade(); public static final Grade E=new Grade(); }*/ 枚舉類對象的屬性不該容許被改動, 因此應該使用 private final 修飾 枚舉類的使用 private final 修飾的屬性應該在構造器中爲其賦值 若枚舉類顯式的定義了帶參數的構造器, 則在列出枚舉值時也必須對應的傳入參數 //有參數的枚舉類 enum Grade{ A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0"); private String value; private Grade(String value){ this.value=value; } public String getValue() { return value; } } 枚舉類3(使用內部類) enum Grade{ A("100-90") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "優"; } }, B("89-80") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "良"; } }, C("79-70") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "中"; } }, D("69-60") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "可"; } }, E("59-0") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "差"; } }; private String value; private Grade(String value){ this.value=value;定義構造方法,傳參; } public String getValue() { return value;//獲取value值 } public abstract String toLocalGrade();//定義抽象方法 } 獲取各個等級對應的中文 A(「100-90」), 優 B(「89-80」), 好 C(「79-70」), 良好 D(「69-60」), 及格 E(「59-0」); 不及格
要求:學生的grade只能是a,b,c,d,e五個級別。能夠給學生設置成績,並能夠輸出學生成績狀況(優,良,中,可,差) package com.hbsi.enum4; public class Student { private String name; private Grade grade; public String getName() { return name; } public void setName(String name) { this.name = name; } public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } } enum Grade{ A("100-90") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "優"; } }, B("89-80") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "良"; } }, C("79-70") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "中"; } }, D("69-60") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "可"; } }, E("59-0") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "差"; } }; private String value; private Grade(String value){ this.value=value; } public String getValue() { return value; } public abstract String toLocalGrade(); } package com.hbsi.enum4; public class Demo1 { /** * @param args */ public static void main(String[] args) { Student s=new Student(); s.setName("張三"); s.setGrade(Grade.A); String str=Grade.B.getValue(); String str1=Grade.B.toLocalGrade(); System.out.println(str+"...."+str1); } } 結果:: 89-80....良
Java中聲明的枚舉類,均是java.lang.Enum類的孩子,它繼承了Enum類的全部方法。經常使用方法:
name():返回此枚舉常量的名稱,在其枚舉聲明中對其進行聲明
ordinal():返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數爲零)。
valueof(Class enumClass, String name):返回帶指定名稱的指定枚舉類型的枚舉常量。 靜態方法
values() 此方法雖然在JDK文檔中查找不到,但每一個枚舉類都具備該方法,它遍歷枚舉類的全部枚舉值很是方便。