为什么需要枚举?
一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在
JDK5
以前采用自定义带有枚举功能的类解决,
Java5
以后可以直接使用枚举予以解决。
JDK5
新增的
enum
关键字用于定义一个枚举类。
枚举类是什么?
枚举类是什么?
¨
枚举类也是一种特殊形式的
Java
类
。
¨
枚举类和普通类的区别?
1. 使用
enum
定义的枚举类默认继承了
java.lang.Enum
类
2.枚举类的构造器只能使用
private
访问控制符
3. 枚举类的所有实例必须在枚举类中显式列出
(,
分隔
;
结尾
).
列出的实例系统会自动添加
public static final
修饰
¨
4.JDK5
中扩展了
switch
语句,它除了可以接收
int
,byte, char, short
外,还可以接收一个枚举类型
¨
5. 若枚举只有一个成员
,
则可以作为一种单例模式的实现方式
¨
Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum
类的所有方法。常用方法:
1.name():
返回此枚举常量的名称,在其枚举声明中对其进行声明
2.ordinal():
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
3.valueof
(Class
enumClass
,String name):
返回带指定名称的指定枚举类型的枚举常量。 静态方法
4.values()
此方法虽然在
JDK
文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便。
案例介绍:
¨
编写一个关于星期几的枚举
WeekDay
,要求:
枚举值:
Mon,Tue,Wed,Thu,Fri,Sat,Sun
该枚举要有一个方法,调用该方法返回中文格式的星期
代码实现:
枚举类:
package util;
public enum WeekEnum {
Mon("星期一") {
//直接重写tovalue方法
@Override
public String tovalue() {
// TODO Auto-generated method stub
return "星期一";
}
},
Tue("星期二") {
@Override
public String tovalue() {
// TODO Auto-generated method stub
return "星期二";
}
},
Wed("星期三") {
@Override
public String tovalue() {
// TODO Auto-generated method stub
return "星期三";
}
},
Thu("星期四") {
@Override
public String tovalue() {
// TODO Auto-generated method stub
return "星期四";
}
},
Fri("星期五") {
@Override
public String tovalue() {
// TODO Auto-generated method stub
return "星期五";
}
},
Sat("星期六") {
@Override
public String tovalue() {
// TODO Auto-generated method stub
return "星期六";
}
},
Sun("星期日") {
@Override
public String tovalue() {
// TODO Auto-generated method stub
return "星期日";
}
}; //对象之间用 "," 隔开 以";" 结束
//将值用final 修饰不可改变
private final String value;
private WeekEnum(String value) {
this.value = value;
}
//将公用的方法 封装起来
public String tovalue() {
return "";
}
}
测试类:
package test;
import org.junit.Test;
import util.WeekEnum;
public class WeekTest {
@Test
public void test() {
//获取WeekEnum的对象
WeekEnum we=WeekEnum.valueOf("Mon");
//调用内部类的tovalue方法返回“星期几的格式”
System.out.println(we.tovalue());
}
}