黑马程序员_枚举

 -------  android培训java培训、期待与您交流! ----------
枚举的定义:
       
一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值。

此类问题在JDK 1.5 以前采用自定义带有枚举功能的类解决,Java 5.0以后可以直接使用枚举予以解决。

JDK 1.5 新增的Enum 关键字用于定义一个枚举类。

普通类模拟实现枚举功能:

         1、私有构造方法;

         2、每个元素分别用共有的静态成员变量表示;

         3、可以自定义若干个公有方法或抽象方法。

        例如:
public class WeekDay {
	private WeekDay(){}
	public static final WeekDay SUN= new WeekDay();
	public static final WeekDay MON= new WeekDay();
	public WeekDay nextDay() {
		if (this == SUN) {
			return MON;
		}else {
			return SUN;
		}
	}
	public String toString() {
		return this == SUN ? "SUN" : "MON";
	}
}
        注意:可以采用抽象方法定义nextDay将大量的if...else语句转移到一个个独立的对象中实现。
        例如:
public abstract class WeekDay {
	private WeekDay(){}
	public static final WeekDay SUN= new WeekDay(){
		public WeekDay nextDay() {
			return MON;
		}
	};
	public static final WeekDay MON= new WeekDay(){
		public WeekDay nextDay() {
			return SUN;
		}
	};
	public abstract WeekDay nextDay();
	public String toString() {
		return this == SUN ? "SUN" : "MON";
	}
}
       测试代码:
public class EnumTest {
	public static void main(String[] args) {
		WeekDay weekday = WeekDay.MON ;
		System.out.println(weekday.nextDay());
	}
}

Java5枚举的定义:

public enum WeekDay {
	SUN,MON,TUE,WED,TUR,FRI,SAT;
}

        注意:最后一个枚举元素后面可以加分号,也可以不加分号。

        代码测试:

public class WeekDayTest {
	public static void main(String[] args) {
		WeekDay weekDay = WeekDay.SUN;
		for (WeekDay weekDay1 : weekDay.values()) {
			System.out.println("第一个是:"+weekDay1.ordinal()+" 星期:"+weekDay1.name()); 
		}
		WeekDay weekday = WeekDay.valueOf("SUN");
		System.out.println(weekday);
		int length = WeekDay.values().length;	
		System.out.println(length);
	}
}
实现带有构造方法的枚举:
public enum WeekDay {
	SUN(1),MON,TUE,WED,TUR,FRI,SAT ;//元素列表必须位于所有的成分之前,元素后加指定参数列表指明调用第二个方法
	private WeekDay() {
		System.out.println("first");
	}
	private WeekDay(int day) {
		System.out.println("second");
	}
}
实现带有抽象方法的枚举:

public enum TrafficLamp {
	RED(30){
		public TrafficLamp nextLamp(){
			return GREEN;
		}
	},
	GREEN(45){
		public TrafficLamp nextLamp(){
			return YELLOW;
		}
	},
	YELLOW(5){
		public TrafficLamp nextLamp(){
			return RED;
		}
	}; 
	public abstract TrafficLamp nextLamp();
	private int time;
	private TrafficLamp(int time){
		this.time = time; 
	}
}
枚举类的总结:

        1、枚举是一种特殊形式的Java类。

        2、枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

        3、枚举类与Java中的普通类一样,在声明枚举类时,也可以声明属性、方法、和构造函数。但枚举类的构造函数必须为私有。

        4、枚举类也可以实现接口、或继承抽象类。       

        5、JDK 1.5 中扩展了switch语句,它除了可以接收int, byte, char, short,String外,还可以接收一个枚举类型。

       6、若枚举类只有一个枚举值,则可以当作单例设计模式使用。

        7、枚举类的实例变量是把所以的枚举实例都加载一次的。

        8、如果调用某个枚举类,那么该枚举类会先把枚举类中的所有元素都加载一次。

 -------  android培训java培训、期待与您交流! ----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值