【黑马程序员】jdk`.5-------枚举类

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------




一、枚举类的定义:

查阅:API中Enum类是一个抽象类,实现了Serizlizable和Comparable接口,继承Object类。枚举是使用enum关键字来修饰类名来创建枚举类,相当于它继承了Enum这个抽象类,可以使用其中的方法

二、枚举的特点:

1、枚举是一个特殊的类,其中可以定义构造方法,成员变量,普通方法,和抽象方法。


2,、枚举类中的构造方法必须是private私有的,因为枚举中的成员变量是固定不变,所以用静态常量来表示,用大写字母表示。外面对其访问可以通过(类名、常量)来调用。


3、枚举类是一个fian类,他的抽象方法必须在它的内部实现


4、枚举是一个特殊的类,他的每个元素就是他的一个实例对象,因此他不可以有子类



5、枚举元素必须位于枚举类中的第一行,用逗号分开,结尾用分号结束。否则会编译不通过


6、枚举元素可以使用switch选择语句


三、枚举的应用:

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


练习:

	/* 
	 * 用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。  
	    1、私有的构造方法 
	    2、每个元素分别用一个公有的静态成员变量表示 
	    3、可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。 
	 
	*/  
	  	  
	public 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?"SUM":"MON";  
	    }  
	} 


练习:一周7天的例子。

 public class WeekdayTest
{
	public static void main(String[] args)
	{
		Weekday[] days = Weekday.values();
		         for(Weekday day : days)
		         {
		               System.out.println("今天是: "+day);
		               System.out.println("明天是:"+day.nextDay());
		         }
	}
	//定义一个内部枚举类
	enum Weekday
	{
//每个元素使用匿名内部类的方法来实现抽象方法,返回当天的下一天是星期几
		       MON
		       { 
			    	   @Override 
			    	public Weekday nextDay()
			    	{
			    		  return TUE;
			    	}
		       } ,
		       TUE
		       {
			    	   @Override
			    	public Weekday nextDay()
			    	{
	
			    		return WED;
			    	}
		       }, 
		       WED
		       {
			    	   @Override
			    	public Weekday nextDay()
			    	{
			    		return THU;
			    	}
		       },
		    	THU
		       {
		    		  @Override
		    		public Weekday nextDay()
		    		{
		    			return FRI;
		    		}
		       },
		       FRI
		       {
		    	 @Override
		    	public Weekday nextDay()
		    	{
		    		return SAT;
		    	}   
		       },
		       SAT
		       {
		    	    @Override
		    	    public Weekday nextDay()
		    	    {
		    	    	return SUN;
		    	    }
		       },
		       SUN
		       {
		    	    @Override
		    	    public Weekday nextDay()
		    	    {
		    	    	return MON;
		    	    }
		       };
		       //定义一个抽象方法来表示下一天是星期几
		       public abstract Weekday nextDay();
	}
}

练习:带参数的私有的构造方法。
public class EnumTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WeekDay1 weekDay=WeekDay1.SUN;
		
		System.out.println(weekDay);
		
		
		WeekDay weekDay2=WeekDay.SAT;
		System.out.println(weekDay2);
		System.out.println("对象名字:"+weekDay2.name());
		System.out.println("返回对象的天数:"+weekDay2.ordinal());
		System.out.println("返回数组:"+weekDay2.values());
		System.out.println("返回枚举类元素个数:"+weekDay2.values().length);
		System.out.println("求字符串对应的WeekDay2的值:"+weekDay2.valueOf("FRI"));
	}
	//enum关键字,枚举,内部类
	public enum WeekDay{
		//带参数的构造方法
		SUN,MON,TUE,WED,THI,FRI(1),SAT;
		WeekDay(){
			System.out.println("空参数");
		}
		WeekDay(int i){System.out.println("int参数:");}
	}
练习:交通灯例子。
//enum关键字,枚举,内部类
	public enum WeekDay{
		//带参数的构造方法
		SUN,MON,TUE,WED,THI,FRI(1),SAT;
		WeekDay(){
			System.out.println("空参数");
		}
		WeekDay(int i){System.out.println("int参数:");}
	}
	//交通灯,的枚举类
	public enum TrafficLamp{
		RED(10){

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

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

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return RED;
			}
			
		};
		//无参构造方法
		public abstract TrafficLamp nextLamp();
		int  time;
		//有参构造方法
		private TrafficLamp(int time){
			this.time=time;
		}
	} 

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值