首先说一说它存在的作用:
一些程序在运行时,它需要的数据不能是任意的,必须是一定范围内的值。这时使用enum可以简化代码。
例:假设一个类要求固定值为A,B,C,D,E
没有枚举之前的写法:
Class Grade{
private Crade(){}
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();
}
枚举类的写法
enum Grade{
//由此可以看出,枚举类中每一个枚举值代表一个实例对象。
A,B,C,D,E;
}
enum关键字用于定义一个枚举类,枚举类只是一中特殊形式的java类,所以它也可以有构造函数,字段,方法。但枚举的构造方法一定是私有的(枚举的存在是要求数据不能是任意的,所以不能让外部程序new对象)
例1:
public class Demo1 {
public static void main(String[] args) {
System.out.println(Grade.A.getValue());
}
//class A 100-90 B 89-80 C 79-70 D 69-60 E 59-0
enum Grade{
//相当于 public static final Grade A=new Grade("100-90");
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;
}
}
}
例二:定义方法,让每个枚举值有自己对应的优,良。。。
enum Grade{
A{
public String localValue() {
return "优";
}
},
B({
public String localValue(){
return "良";
}
},C{
public String localValue(){
return "一般";
}
}
,D{
public String localValue(){
return "差";
}
}
,E{
public String localValue(){
return "不及格";
}
};
public abstract String localValue();
}
public class Demo2 {
public static void main(String[] args) {
System.out.println(Grade.A.localValue());
}
}
swith语句,它除了可以接受int,byte,char,short以外,还可以接受一个枚举类型
例:
public class Demo3 {
public static void main(String[] args) {
String str="A";
Grade g=Grade.valueOf(str);
switch(g){
case A:{
System.out.println("优");
break;
}
case B:{
System.out.println("良");
break;
}
case C:{
System.out.println("一般");
break;
}
case D:{
System.out.println("及格");
break;
}
case E:{
System.out.println("差");
break;
}
}
}
}
enum Grade{
A,B,C,D,E;
}
若枚举类只有一个枚举值,则可以当作单例设计模式使用
enum Grade{
A;
}
单例饿汉式
class Grade
private Grade(){}
static Grade g=new Grade();
public static Grade getInstance(){
return g;
}
}
枚举类一样可以实现接口继承类
ava.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。详见文档。 |