黑马程序员--枚举

               ------------android培训java培训、期待与您交流!--------------


一、枚举概述

枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。

枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。

把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。

枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段

无法实现这一目标。

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

自定义类实现枚举功能 
1、私有的构造方法。 
2、每个元素分别用一个公有的静态成员变量表示。 

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


模拟星期的枚举类(第一种方式)

package demo;

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";

	}

}

模拟星期的枚举类(第二种方式)

package cn.itcast.day1;

public abstract class WeekDay1 {
	private WeekDay1(){}
	
	public final static WeekDay1 SUN = new WeekDay1(){

		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return MON;
		}
		
	};
	public final static WeekDay1 MON = new WeekDay1(){

		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return SUN;
		}
		
	};	
	
	public abstract WeekDay1 nextDay();
	
/*	public WeekDay nextDay(){
		if(this == SUN){
			return  MON;
		}else{
			return SUN;
		}
	}
*/
	
	public String toString(){
		return this==SUN?"SUN":"MON";
	}
}
第二种方式采用了抽象方法定义nextDay将大量的if...else语句转移到一个个独立的对象中实现。 

二、枚举类常用方法

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

                WeekDay weekDay2 = WeekDay.FRI;

System.out.println(weekDay2.name());//返回枚举对象的名称FRI
System.out.println(weekDay2.ordinal());//返回此枚举对象的在第几个位置
System.out.println(WeekDay.valueOf("SUN").);返回SUN对象
System.out.println(WeekDay.values().length);返回此枚举类拥有的对象个数


应用示例:

public class WeekDayTest { 

public static void main(String[] args) { 

WeekDay weekDay = WeekDay.SUN; 

for(WeekDay weekday: weekDay.values()){ 
System.out.println("第一个是:"+weekday.ordinal()+" 星期:"+weekday.name()); 
} 

WeekDay weekday = WeekDay.valueOf("SUN"); 
System.out.println(weekday); 
System.out.println(WeekDay.values().length);

} 

}


三、带构造函数的枚举类
	public enum WeekDay {

		SUN(1), MON(), TUE, WED, THI, FRI, SAT;
		private WeekDay() {
			System.out.println("first");
		}
		private WeekDay(int day) {
			System.out.println("second");
		}
	}
结果是Sun(1)调用的是带参数的构造函数,而其他的对象调用的是无参构造函数。


四、交通灯枚举

	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;
		}
	}
}


               ------------android培训java培训、期待与您交流!--------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值