您的位置:首页 > 职场人生

黑马程序员_基础加强_枚举

2013-03-20 20:07 176 查看
-------
android培训、java培训、期待与您交流! ----------

1.枚举:就是要让某个类型的变量取值是能为若干个固定之中的一个,否则,编译就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标,在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如星期一到星期日七个数据元素组成了一周的“数据集”,用普通函数也可以实现枚举类,要有以下特点:

1、私有的构造方法

2、每个元素分别用一个公有的静态成员变量表示(即都用public static final修饰)
3、可以有若干个公有方法抽象方法,例如,提供nextDay方法必须是抽象的。

用普通类来实现枚举类

//定义个WeekDay来实现星期的枚举
public abstract class WeekDay {
private int value;
private String name;
private WeekDay(int value,String name)
{
this.value=value;
this.name=name;
}
public static final WeekDay SUN=new WeekDay(1,"SUN")
{
@Override
public WeekDay netDay() {
// TODO Auto-generated method stub
return MON;
}
};
public static final WeekDay MON=new WeekDay(2,"MON")
{
@Override
public WeekDay netDay() {
// TODO Auto-generated method stub
return TUE;
}
};
public static final WeekDay TUE=new WeekDay(3,"TUE")
{
@Override
public WeekDay netDay() {
// TODO Auto-generated method stub
return WED;
}
};
public static final WeekDay WED=new WeekDay(4,"WED")
{
@Override
public WeekDay netDay() {
// TODO Auto-generated method stub
return THU;
}
};
public static final WeekDay THU=new WeekDay(5,"THU")
{
@Override
public WeekDay netDay() {
// TODO Auto-generated method stub
return FRI;
}
};
public static final WeekDay FRI=new WeekDay(6,"FRI")
{
@Override
public WeekDay netDay() {
// TODO Auto-generated method stub
return SAT;
}
};
public static final WeekDay SAT=new WeekDay(7,"SAT")
{
@Override
public WeekDay netDay() {
// TODO Auto-generated method stub
return SUN;
}
};
public abstract WeekDay netDay();
public int getValue()
{
return this.value;
}
public String getName()
{
return this.name;
}

}
public class WeekDayTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
WeekDay sunday=WeekDay.SUN;
System.out.println("今天是"+sunday.getName());
System.out.println(sunday.getName()+"的下一天是"+(sunday.netDay()).getName());

}

}


在java1.5之后,java中加入了枚举类的概念,枚举类用enum关键字来修饰,枚举类是一个特殊的类,但是它同样有自己的属性和方法,也可以实现多个接口,枚举类的注意事项:

1. 枚举类型不能使用extends关键字,但是可以使用implements关键字。这样我们可以把不同枚举类型共有的行为提取到接口中,来规范枚举类型的行为。

2. 枚举类型的自定义构造函数并不能覆盖默认执行的构造函数,它会跟在默认构造函数之后执行。

3. 枚举类型的自定义构造函数必须是私有的。你不需要在构造函数上添加private关键字,编译器会为我们代劳的。

4. 枚举类型中枚举常量的定义必须放在最上面,其后才能是变量和方法的定义。

public enum EnumWeekDay {
SUN(1)
{

@Override
public EnumWeekDay nextDay() {
// TODO Auto-generated method stub
return MON;
}

},
MON(2)
{
@Override
public EnumWeekDay nextDay() {
// TODO Auto-generated method stub
return TUE;
}
},
TUE(3)
{
@Override
public EnumWeekDay nextDay() {
// TODO Auto-generated method stub
return WED;
}
},
WED(4)
{
@Override
public EnumWeekDay nextDay() {
// TODO Auto-generated method stub
return THU;
}
},
THU(5)
{
@Override
public EnumWeekDay nextDay() {
// TODO Auto-generated method stub
return FRI;
}
},
FRI(6)
{
@Override
public EnumWeekDay nextDay() {
// TODO Auto-generated method stub
return SAT;
}
},
SAT(7)
{
@Override
public EnumWeekDay nextDay() {
// TODO Auto-generated method stub
return SUN;
}
};
private int value;
EnumWeekDay(int value)
{
this.value=value;
}
public abstract EnumWeekDay nextDay();
}
public class EnumWeekDayTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
EnumWeekDay weekday=EnumWeekDay.FRI;
System.out.println("今天是:"+weekday);
//返回weekday的下一天是哪一天
System.out.println(weekday+"的下一天是:"+weekday.nextDay());
//返回weekday在枚举类中的声明的位置
System.out.println(weekday+"在枚举中是第"+weekday.ordinal()+"个被声明");
//返回枚举类中所有的实例对象,并输出
EnumWeekDay[] weekDays=EnumWeekDay.values();
for(EnumWeekDay week:weekDays)
{
System.out.println(week);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: