枚举

枚举

        枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这目标。


       1.用普通类实现枚举功能

                普通类实现枚举的要素:    私有的构造方法
                                                             每个元素分别用一个公有的静态成员变量表示
                                                             可以有若干公有方法或抽象方法。

	public class WeekDayTest {
		//私有化构造方法
		private WeekDayTest(){}
		
		//创建属性
		public static final WeekDayTest SUN = new WeekDayTest() ;
		public static final WeekDayTest MON = new WeekDayTest();
		
		//获取下一个属性方法
		public WeekDayTest nextDay() {
			if(this == SUN) {
				return MON;
			} else {
				return SUN;
			}
		}

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

 

    用抽象方法实现nextDay()方法

 

abstract class WeekDay {
	
	//1.私有化构造方法
	private WeekDay() {}
	
	//创建属性
	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 == SUN ? "SUN" : "MON";
	}
}

     2. 枚举的基本应用


    枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象.枚举类的values,valueOf,name,toString,ordinal等方法可以使用.

    枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
    枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

enum WeekDay1 {
	SUN(1){
		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return MON;
		}
		
	},
	MON(){

		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return TUE;
		}
		
	},
	TUE{
	@Override
	public WeekDay1 nextDay() {
		// TODO Auto-generated method stub
		return WED ;
	}
	
	},
	WED{
		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return THU;
		}
	},
	THU{
		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return FRI;
		}
	},
	FRI{
		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return SAT;
		}
	},
	SAT{
		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return SUN;
		}
	};
	
	WeekDay1(){
		System.out.println("First");
	}
	
	private 
	WeekDay1(int i) {
		System.out.println("Second");
	}
	
	public abstract WeekDay1 nextDay();
}

     3.在枚举中创建构造方法和实现抽象类


       构造方法:   构造方法必须定义成私有的
                         枚举元素MON和MON()的效果一样,都是调用默认的构造方法

       方法: 枚举中可以有普通方法或抽象方法

       抽象方法: 枚举中的抽象方法都得实现

         

enum TrafficLamp {
	RED(30) {

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

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

		@Override
		public TrafficLamp nextLamp() {
			// TODO Auto-generated method stub
			return RED;
		}
		
	};
	
	//属性
	private int time;
	
	TrafficLamp(int time) {
		this.time = time;
	}
	
	//抽象方法
	public abstract TrafficLamp nextLamp();
}

 

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


枚举中的一些方法   

     valueOf(String)  根据字符串获得枚举中相同字符的枚举常量

    ordinal() 返回枚举常量的序数

     getDeclaringClass() 返回与此枚举常量的枚举类型相对应的 Class 对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值