黑马程序员 枚举学习笔记

-------    Android培训 、 java培训 、期待与您交流  ------- 
一.什么是枚举以及枚举的作用(用一个普通类来模拟枚举的作用)
首先先看一段代码,如下所示:
package cn.itcast.enumTest;

public class enumTest {

	/**
	 * 用普通的java类来模拟实现枚举功能
	 * @param args
	 */
	public static void main(String[] args) {
		WeekDay1 weekDay = WeekDay1.MON;
		System.out.println(weekDay.nextDay());
	}

}


package cn.itcast.enumTest;

public abstract class WeekDay1 {
  private WeekDay1(){}
  public abstract WeekDay1 nextDay();
  public final static WeekDay1 MON = new WeekDay1(){

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

	@Override
	public WeekDay1 nextDay() {
		// TODO Auto-generated method stub
		return MON;
	}
	  
  };
  public String toString(){
	 return this==MON?"MON":"SUN";
  }
}
分析一下上述的代码,该程序中定义了一个类WeekDay1,在该类中,把构造方法私有了,也就是不能new该对象,另外,该类中含有一个抽象方法,nextDay,返回值是该类本身,在类的内部,建立了两个子类对象,MON和SUN,这两个对象必须覆盖抽象方法nextDay(),最后,为了能够打印出对象名,覆盖了toString()方法,这就是用一个普通类去模拟实现枚举的功能,里面涉及的主要知识有抽象类,抽象方法,内部类等。
从上面的分析中,我们可以看到,枚举可以在内部限定我们的书写,枚举提供了几个静态常量,我们按照枚举提供的常量就可以避免写错。另外,我们在书写上面的代码时,利用了很多知识,很麻烦,为了加快软件开发效率,减少程序员的工作量,java对上述代码进行了封装,得到了枚举类,那么,枚举中都有哪些方法呢,我们通过一段程序进行学习:
package cn.itcast.enumTest;

public class enumMethod {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
			
			WeekDay weekDay = WeekDay.FRI;
			System.out.println(weekDay);
			System.out.println(weekDay.ordinal());
			System.out.println(WeekDay.valueOf("FRI"));
			System.out.println(WeekDay.values().length);
			
			
		}
}

package cn.itcast.enumTest;

public enum WeekDay {
SUN(1),MON,TUES,WEDN,THUR,FRI(1),SAT;
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
执行上述代码,编译运行后的结果如下所示:
FRI
5
FRI
7
由此可见,enum类中定义了许多操作枚举的方法,这使得我们使用时更加方便,快捷。
二.枚举综合应用
根据枚举中的作用,我们做了交通灯这个案例,对我们深入理解枚举有重要的作用,下面是交通灯的代码:
package cn.itcast.enumTest;

public class enumMethod {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
			
			WeekDay weekDay = WeekDay.FRI;
			System.out.println(weekDay);
			System.out.println(weekDay.ordinal());
			System.out.println(WeekDay.valueOf("FRI"));
			System.out.println(WeekDay.values().length);
			
			
		}
	public enum TrafficLamp{
		RED(30){
			public TrafficLamp nextLamp() {
				return GREEN;
			}
			
		},
		YELLOW(5){
			public TrafficLamp nextLamp() {
				return RED;
			}
		},
		GREEN(30){
			public TrafficLamp nextLamp() {
				return YELLOW;
			}
		};
		public abstract TrafficLamp nextLamp();
		private int time;
		private TrafficLamp(int time){this.time=time;}
	}

	}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值