Java高新技术 枚举



 Java高新技术   枚举


知识概要:

                (1)为什么要有枚举

                (2)枚举的示例

                (3)枚举的应用

                (4)枚举的高级应用


(1)为什么需要枚举

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

              假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;

              或即使使用常量方式也无法阻止意外。

              枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,  

              编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,

              普通变量的方式在开发阶段,无法实现这一目标。



用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能?


            私有的构造方法  

            每个元素分别用一个公有的静态成员变量表示 

            可以有若干公有方法或抽象方法。

            采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。


package cn.itheima.day1;

public abstract class WeekDay1 {
	private WeekDay1(){};
	
	public static final WeekDay1 MON = new WeekDay1(){
		
		public WeekDay1 nextDay()
		{
			return SUN;
		}
		
	};
	public static final WeekDay1 SUN = new WeekDay1(){
		
		public WeekDay1 nextDay()
		{
			return MON;
		}
		
		
	};
	public abstract WeekDay1 nextDay();
	/*public WeekDay nextDay()
	{
		if(this==SUN)
		return  MON;
		else
			return SUN;
	}*/
	public String toString()
	{
		return this==SUN?"SUN":"MON";
		
	}
}

代码测试: 
package com.itheima.day01; 

public class WeekDayTest { 

	public static void main(String[] args) { 

	WeekDay Mon = WeekDay.MON; 

	System.out.println(Mon); 

			                       } 

} 



public enum WeekDay{
		
		SUN,MON,TUE,WED,THU,FRI,SAT;//; 可加可不加上
		
		private WeekDay(){System.out.println("first");};
		private WeekDay(int day){System.out.println("second");}

		
	}

枚举应用交通灯,trafficLamp 私有的构造函数 私有的成员变量 和public方法

public enum TrafficLamp
	{
		RED(50)
		{
			public TrafficLamp TrafficLampnexLamp()
			{
				return GREEN;
				
			}
		},
		GREEN(30)
		{
			public TrafficLamp TrafficLampnexLamp()
			{
				
				return YELLOW;
			}
		},
		YELLOW(5)
		{
			public TrafficLamp TrafficLampnexLamp()
			{
				
				return RED;
			}
		};

		public abstract TrafficLamp  TrafficLampnexLamp();

		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、枚举类的实例变量是把所以的枚举实例都加载一次的。如果调用了某个枚举类,那么该枚举类先把枚举类 里面的所有元素都先加载一次。



posted @ 2014-06-01 16:13  博客园杀手  阅读(184)  评论(0编辑  收藏  举报