黑马程序员 java学习笔记——枚举

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

为什么要定义枚举?

问题:要定义星期几或性别的变量,该怎么定义?

假设用1-7分别表示星期一到星期日,(一般0表示星期日 6表示星期六)
但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。

什么是枚举?

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

用普通类模拟枚举的实现原理

示例代码如下:
abstract class WeekDay{
	private WeekDay(){}
	public final static WeekDay SUN=new WeekDay(){
		public WeekDay nextDay(){
			return MON;
		}
	};
	public final static WeekDay MON=new WeekDay(){
		public WeekDay nextDay(){
			return SUN;
		}
	};
	public abstract WeekDay nextDay();
	public String toString(){
		return this==SUN?"SUN":"MON";
	}
}
public class Demo{
	public static void main(String[] args){
		WeekDay weekDay=WeekDay.MON;
		System.out.println(weekDay.nextDay());
	}
}

java5枚举的基本应用

示例代码如下:
public class Demo{
	public static void main(String[] args){
		WeekDay weekDay=WeekDay.MON;
		sop(weekDay);
		sop(weekDay.name());
		sop(weekDay.ordinal());
		sop(WeekDay.valueOf("WED").toString());
		sop(WeekDay.values().length);
		
	}
	public enum WeekDay{
		SUN,MON,TUE,WED,THU,FRI,SAT;
	}
	public static void sop(Object obj){
		System.out.println(obj);
	}
}

实现带有构造方法的枚举

示例代码如下:
public class Demo{
	public static void main(String[] args){
		WeekDay weekDay=WeekDay.MON;
		sop(weekDay);
		sop(weekDay.name());
		sop(weekDay.ordinal());
		sop(WeekDay.valueOf("WED").toString());
		sop(WeekDay.values().length);
		
	}
	public enum WeekDay{
		SUN(0),MON(1),TUE(2),WED,THU,FRI,SAT;
		private WeekDay(){
			sop("无参构造方法");
		}
		private WeekDay(int day){
			sop("有参构造方法");
		}
	}
	public static void sop(Object obj){
		System.out.println(obj);
	}
}

实现带有抽象方法的枚举

示例代码如下:
public class Demo{
	public static void main(String[] args){
		TrafficLamp red=TrafficLamp.RED;
		System.out.println(red.nextLamp());
		
	}
	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;
		}
	}
}

----------------------  ASP.Net+Android+IO开发S .Net培训 、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值