浅谈枚举

1,枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个。否则,编译器会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法制,普通变量的方式在开发阶段是不能实现这个目标的。
2,枚举是一种特殊的类,其中的每一个元素都是一个对象。
3,可以用枚举实现单例。(因为单例就是只用一个对象。当枚举就一个元素的时候,就是单例模式。)
4,枚举的构造方法是私有的 ,private


1,用普通的类实现枚举的功能:

package com.test;
public abstract class WeekDay {
//构造方法私有的,不可以new 实例。
private WeekDay(){};
//new出几个对象共外界使用。
public static final WeekDay SUN = new WeekDay(){
@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return MON;
}
};
public static final WeekDay MON = new WeekDay(){
@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return SUN;
}
};
public abstract WeekDay nextDay();
//普通的方法来实现,可以使用匿名内部类,如上。

@Override
public String toString() {
return this==MON ?"mon":"sun";
}
}

这样我们在别的地方要使用上面类的成员的时候,就只能取固定的几个值。
WeekDay SUN = WeekDay.SUN;
WeekDay MON = WeekDay.MON;
System.out.println(SUN.nextDay());

下面我们使用枚举来实现,就简单的多了》

public enum WeekDay1 {
SUN,MON(2);
private WeekDay1(){};//不带参数的构造方法
private WeekDay1(int i){};//带参数的构造方法。和Java的普通类很像,但写法不一样。
}
WeekDay1 mon = WeekDay1.MON;
System.out.println(mon.name());
System.out.println(mon.ordinal());/返回序号。
System.out.println(mon.values());
System.out.println(mon.valueOf("SUN"));//SUN
System.out.println(WeekDay1.values());//返回数组
System.out.println(WeekDay1.valueOf("SUN"));//返回SUN


下面写一个比较复杂的枚举例子,带抽象方法,和参数的构造方法。

public enum TrafficLamp{
GREEN(20){
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}
},RED(15){
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}
},YELLOW(5){
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time = time;}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值