Java中的JDK1.5新特性之枚举

—————————————————————————————————————————————————————————————————————————————

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

枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后面要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报错误。

带构造方法的枚举

  1、构造方法必须定义成私有的

   2、如果有多个构造方法,该如何选择哪个构造方法?

   3、枚举元素MON和MON()的效果一样,都是调用默认的构造方法。

带抽象方法的枚举

   1、定义枚举TrafficLamp

    2、实现普通的next方法。

    3、实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类对象采用类似内部类的方式进行定义。

    4、增加上表示时间的构造方法

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

—————————————————————————————————————————————————————————————————————————————

带构造方法的枚举代码:

public class EnumTest {

	public static void main(String[] args) {
		
		WeekDay w = WeekDay.FRI;
		System.out.println("w="+w);//FRI
		System.out.println(w.name());//FRI
		System.out.println(w.ordinal());//5,排行老几
		System.out.println(WeekDay.valueOf("SUN").toString());//SUN
		System.out.println(WeekDay.values().length);//7,返回一个数组,数组的长度
	}
	
	public enum WeekDay{
		//在枚举元素的后面跟上一对括号,就表示创建这个元素指向实例对象的时候,是使用哪个构造方法。
		SUN(1),MON(),TUE,WED,THI,FRI,SAT;//元素列表必须放在最前面
		/*
		 *定义构造方法时
		 * 1、必须位于元素列表之后。
		 * 2、构造方法必须是私有的。
		 * 3、构造方法必须有代码体,即,加上大括号
		 */
		private WeekDay(){System.out.println("first");};
		private WeekDay(int day){System.out.println("second");};
		
	}
}
执行结果:

second
first
first
first
first
first
first
w=FRI
FRI
5
SUN
7
带抽象方法的枚举代码:

package cn.itcast.day1;

public class EnumTest {

	public static void main(String[] args) {
		
		WeekDay w = WeekDay.FRI;
		System.out.println("w="+w);//FRI
		System.out.println(w.name());//FRI
		System.out.println(w.ordinal());//5,排行老几
		System.out.println(WeekDay.valueOf("SUN").toString());//SUN
		System.out.println(WeekDay.values().length);//7,返回一个数组,数组的长度
	}
	/*
	 * 定义一个交通灯的枚举
	 */
	public enum TrafficLamp{
		RED{//RED是一个元素,这个元素是由TrafficLamp的子类来实现的
			@Override
			public TrafficLamp nextLamp() {
				return GREEN;//红灯后,返回绿灯
			}
			
		},
		GREEN{//GREEN是一个元素,这个元素是由TrafficLamp的子类来实现的
			@Override
			public TrafficLamp nextLamp() {
				return YELLOW;//绿灯后,返回黄灯
			}
		},
		YELLOW{//YELLOW是一个元素,这个元素是由TrafficLamp的子类来实现的
				@Override
				public TrafficLamp nextLamp() {
					return RED;//黄灯后,返回红灯
				}
		};
		//抽象方法
		public abstract TrafficLamp nextLamp();
	}
}
下面定义成员变量—交通灯的时间time,然后再定义一个构造方法来指定每个灯的时间,构造方法必须是私有的。
这个时候,每个元素(RED,GREEN,YELLOW)调用的时候,元素后面都跟上一对括号,表示指定哪个构造方法。


package cn.itcast.day1;

public class EnumTest {

	public static void main(String[] args) {
		
		WeekDay w = WeekDay.FRI;
		System.out.println("w="+w);//FRI
		System.out.println(w.name());//FRI
		System.out.println(w.ordinal());//5,排行老几
		System.out.println(WeekDay.valueOf("SUN").toString());//SUN
		System.out.println(WeekDay.values().length);//7,返回一个数组,数组的长度
	}
	/*
	 * 定义一个交通灯的枚举
	 */
	public enum TrafficLamp{
		
		<strong>//这个时候,每个元素调用的时候,元素后面都跟上一对括号,表示指定哪个构造方法
		RED(30){//RED是一个元素,这个元素是由TrafficLamp的子类来实现的
			@Override
			public TrafficLamp nextLamp() {
				return GREEN;//红灯后,返回绿灯
			}
			
		},
		GREEN(45){//GREEN是一个元素,这个元素是由TrafficLamp的子类来实现的
			@Override
			public TrafficLamp nextLamp() {
				return YELLOW;//绿灯后,返回黄灯
			}
		},
		YELLOW(5){//YELLOW是一个元素,这个元素是由TrafficLamp的子类来实现的
				@Override
				public TrafficLamp nextLamp() {
					return RED;//黄灯后,返回红灯
				}
		};
		//抽象方法
		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、付费专栏及课程。

余额充值