枚举

jdk1.5新特性--枚举。

为什么要有枚举?

问题:需要定义星期或性别,该怎么定义呢?假设星期定义为0-7,但是有的人可能更钟情于0-6。这样没有统一的规范,容易在运行时出错。

枚举就是为了解决这个问题而出现的,枚举就是让某一个变量的取值只能为若干个固定值中的一个,否则编译器报错,枚举可以实现在编译阶段控制源程序的非法输入。

枚举只有一个成员时,可以作为单例的一种 实现方式。

下面用模似一个枚举类

<span style="font-size:18px;"><span style="font-size:18px;">package demo;
//模拟枚举
public abstract class WeekDay {
 
public final static WeekDay SUN=new WeekDay(){

	@Override
	public WeekDay nextDay() {
		// TODO Auto-generated method stub
		return MON;
	}
	
};
public final static 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?"星期日":"星期一";
	}
}</span></span>

<span style="font-size:18px;">package demo;

public class EnumTest {

	/**
	 * @param args
	 */
public static void main(String[] args) {
WeekDay weekDay=WeekDay.MON;//固定范围取值。只能是其实例对象.
System.out.println(weekDay);//星期日
System.out.println(weekDay.nextDay());//星期一
System.out.println("***enum method***");
WeekDay2 weekDay2=WeekDay2.SAT;
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());//得到此枚举实例的序列
System.out.println("***enum static method***");
System.out.println(WeekDay2.valueOf("MON"));//将字符串转成WeekDay2
System.out.println(WeekDay2.values().length);//得到此枚举的所有元素,数组来的。打印长度得了。

}
/*
 * java已经封装了“枚举”,直接用就可以 了,
 * 下面来看看枚举的简单应用,
 */
public enum WeekDay2{
	SUN(),MON(),WED(),THU,FRI,SAT;

}
/*
 * 有构造 方法的枚举。
 */
public enum WeekDay3{
	SUN(1),MON(),WED(),THU(),FRI(),SAT();//sun调用的是带参数的构造 方法。
//构造方法必须是私有的。
//构造方法必须必须定义在实例后面。
   private WeekDay3()
   {
	   System.out.println("first...");
   }
   private WeekDay3(int day)
   {
	   System.out.println("second...");
   }
}
/*
 * 较复杂的一个枚举。
 * 带抽象方法
 * 带构造方法。
 * 交通灯:TrafficLamp</span>
<span style="font-size:18px;"> */
public enum TrafficLamp
{
	//new Date(){},new的是Date的子类对象,调用父类的空参数构造方法
	//new Date(12){},new 的是Date的子类对象,调用的是父类有参构造方法。
	RED(30){

		@Override
		public TrafficLamp nextLamp() {
			// TODO Auto-generated method stub
			return GREEN;
		}
		
	},
	GREEN(45){

		@Override
		public TrafficLamp nextLamp() {
			// TODO Auto-generated method stub
			return YELLOW;
		}
		
	},
	YELLOW(10){

		@Override
		public TrafficLamp nextLamp() {
			// TODO Auto-generated method stub
			return RED;
		}
		
	};
	public abstract TrafficLamp nextLamp();
	private TrafficLamp(int time){
		this.time=time;
	}
	private int time;
}
}</span>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值