java高級編程之枚舉

 接下來本章的重點來了,就是枚舉;

枚舉是什麼?

Java中的枚舉是一種特殊的類,不但可以添加字段,構造方法,普通方法,甚至可以添加main()方法,

爲什麼需要枚舉?

一些方法在運行時,它需要的數據不能是任意的,而必須是一定範圍內的值,此類問題在JDK5以前採用自定義帶有枚舉功能的類解決,Java5以後可以直接使用枚舉予以解決。

 

JDK 5新增的 enum 關鍵字用於定義一個枚舉類。

 

枚舉類也是一種特殊形式的Java類。

枚舉類和普通類的區別:

使用 enum 定義的枚舉類默認繼承了 java.lang.Enum

枚舉類的構造器只能使用 private 訪問控制符

枚舉類的所有實例必須在枚舉類中顯式列出(, 分隔 ; 結尾). 列出的實例系統會自動添加 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文檔中查找不到,但每個枚舉類都具有該方法,它遍歷枚舉類的所有枚舉值非常方便。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章