----------android培训、java培训、期待与您交流!----------
1.枚举
枚举(Enum)是Java1.5新加入的一个数据类型,枚举就相当于一个类,与其他数据类型不同的是枚举可以自己定义常量.提高了安全性
在jdk1.6中 switch语句也支持枚举类型了
2.枚举的常用方法:
static
| valueOf(Class<T> enumType,String name) 返回带指定名称的指定枚举类型的枚举常量。 |
String | name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。 |
int | ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 |
3.枚举的特点:
1:
枚举列表必须写在最前面,否则编译出错
2
:构造方法必须是私有的,并且可以在枚举列表中直接调用
3:
枚举中的字段都是
public static final
特性
,
是枚举类本身的类型
.
每个字段之间有一个
","
号隔开
,
最后一个字段后面的
","
可以省略掉
,
整个字段的最后要有一
个 ";" 结束符号
4.枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象
5. 枚举中可以含有抽象方法,因为枚举本身就是抽象类.一旦枚举中含有抽象方法,那么在字段创建内部类的时候一定要实现该抽象方法.
枚举重也可以定义实现方法.比如枚举都要复写父类的toString()方法.
4.枚举的好处:
先看以下需求:定义一个类表示星期,有打印下一天,和当天等功能,用普通方法实现如下:
class ClassDemo {
public static void main(String[] args) {
WeekDay today = WeekDay.SAT;
System.out.println(today+"的下一天是"+today.nextDay());
}
}
class WeekDay {
//构造函数
private WeekDay(){}
//创建星期的七个对象
public final static WeekDay SUN = new WeekDay();
public final static WeekDay MON = new WeekDay();
public final static WeekDay TUE = new WeekDay();
public final static WeekDay WED = new WeekDay();
public final static WeekDay THU = new WeekDay();
public final static WeekDay FN = new WeekDay();
public final static WeekDay SAT = new WeekDay();
//下一天的方法
public WeekDay nextDay() {
if(this==SUN)
return MON;
else if(this==MON)
return TUE;
else if(this==TUE)
return WED;
else if(this==WED)
return THU;
else if(this==THU)
return FN;
else if(this==FN)
return SAT;
else
return SUN;
}
//重写toString()方法
public String toString(){
if (this == SUN)
return "星期日";
else if(this==MON)
return "星期一";
else if(this==TUE)
return "星期二";
else if(this==WED)
return "星期三";
else if(this==THU)
return "星期四";
else if(this==FN)
return "星期五";
else
return "星期六";
}
}
以上需求若用枚举完成则可以改为:
public class EnumDemo{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(EnumTest.WeekDay.MON.nextDay());
}
public enum WeekDay {
//创建星期的七个对象
SUN, MON, TUE, WED, THU, FN, SAT ;
//下一天的方法
public WeekDay nextDay() {
if(this==SUN)
return MON;
else if(this==MON)
return TUE;
else if(this==TUE)
return WED;
else if(this==WED)
return THU;
else if(this==THU)
return FN;
else if(this==FN)
return SAT;
else
return SUN;
}
//重写toString()方法
public String toString(){
if (this == SUN)
return "星期日";
else if(this==MON)
return "星期一";
else if(this==TUE)
return "星期二";
else if(this==WED)
return "星期三";
else if(this==THU)
return "星期四";
else if(this==FN)
return "星期五";
else
return "星期六";
}
}
}
5:实现带有构造方法和抽象方法的枚举:
public class EnumTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(EnumTest.WeekDay.MON.nextDay().day);
System.out.println(EnumTest.WeekDay.valueOf("SAT").day);
}
//创建枚举
public enum WeekDay {
SUN{
@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return MON;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "星期天";
}
},
MON{
@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return TUE;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "星期一";
}
},
TUE{
@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return WED;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "星期二";
}
},
WED{
@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return THU;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "星期三";
}
},
THU {
@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return FN;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "星期四";
}
},
FN{
@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return SAT;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "星期五";
}
},
SAT(6){//使用带参数的构造函数WeekDay(int day)实例化
@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return SUN;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "星期六";
}
};
public int day;
private WeekDay(){};
private WeekDay(int day){this.day=day;};
public abstract WeekDay nextDay();//创建抽象方法nextDay(),返回的对象是类的本身WeekDay。
public abstract String toString();//创建抽象方法toString(),返回的对象是String
}
}