黑马程序员技术交流社区
标题:
枚举的笔记
[打印本页]
作者:
Sakuratossi
时间:
2014-8-31 10:04
标题:
枚举的笔记
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
普通类如何实现枚举功能:
1. 私有构造方法
2. 将每个元素分别用公有静态成员变量表示
3. 可以用若干公有方法或抽象方法实现
定义一个Weekday的类来模拟枚举功能。
package it.cast.day02;
public abstract class WeekDayOld {
// 不能被外部创建对象
private WeekDayOld(){}
/*
* 普通类如何实现枚举功能:
* 1. 私有构造方法
* 2. 将每个元素分别用公有静态成员变量表示
* 3. 可以用若干公有方法或抽象方法实现
// 一周有七天:星期类型的常量对象
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 FRI = new WeekDay();
public final static WeekDay SAT = new WeekDay();
//theNextDay 不能是静态,因为它一定会被某一个对象调用。 通过这个方法返回一个对象
public WeekDay theNextDay()
{
//如果当前调用这个方法的对象是星期*。就返回它的下一天对象。
if(this == SUN)
return MON;
if(this == MON)
return TUE;
if(this == TUE)
return WED;
if(this == WED)
return THU;
if(this == THU)
return FRI;
if(this == FRI)
return SAT;
if(this == SAT)
return SUN;
return null;
}
*/
//方法2,抽象方法 子类对象实现抽象方法,省去写if 的麻烦
public final static WeekDayOld SUN = new WeekDayOld()
{
@Override
public WeekDayOld theNextDay() {
// TODO Auto-generated method stub
return MON;
}
};
public final static WeekDayOld MON = new WeekDayOld(){
@Override
public WeekDayOld theNextDay() {
// TODO Auto-generated method stub
return TUE;
}
};
public final static WeekDayOld TUE = new WeekDayOld()
{
@Override
public WeekDayOld theNextDay() {
// TODO Auto-generated method stub
return null;
}
};
// public final static WeekDay WED = new WeekDay();
// public final static WeekDay THU = new WeekDay();
// public final static WeekDay FRI = new WeekDay();
// public final static WeekDay SAT = new WeekDay();
public abstract WeekDayOld theNextDay();
public String toString(){
if(this == SUN)
return "SUN";
if(this == MON)
return "MON";
if(this == TUE)
return "TUE";
// if(this == WED)
// return "WED";
// if(this == THU)
// return "THU";
// if(this == FRI)
// return "FRI";
// if(this == SAT)
// return "SAT";
return null;
}
}
package it.cast.day02;
public class EnumTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
WeekDayOld Weekday = WeekDayOld.SUN;
System.out.println(Weekday.theNextDay());
*/
WeekDayEnum weekday = WeekDayEnum.MON;
System.out.println(weekday);
System.out.println(weekday.ordinal());
System.out.println(weekday.valueOf("TUE"));
System.out.println(weekday.values().length);
System.out.println("----------------");
for(WeekDayEnum wd: WeekDayEnum.values())
{
System.out.println(wd.name());
}
}
}
复制代码
作者:
夜半风
时间:
2014-8-31 13:04
这个不是视频里讲过的吗
作者:
静水流华
时间:
2014-8-31 15:29
你的代码好狠,我才刚学这一块,看了好一会才懂
作者:
静水流华
时间:
2014-8-31 15:32
用了匿名内部类
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2