黑马程序员--学习笔记之高新技术篇-枚举类

一、枚举  

1. 枚举的定义

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个。枚举本身是一种特殊的类,枚举中的每一个元素都是一个枚举的实例。因此,在比较两个枚举的类型的时候直接用“==”就行。如果有需要还可以在枚举类型中添加一些构造器,方法和域。构造器只是在构造枚举常量的时候被调用。所有的枚举都继承自Enum类。


2. 枚举类Enum中的常用方法


int ordinal(); 返回枚举常量的序数(初始常量序数为零)

String name(); 返回枚举常量的名称。

String toString(); 返回枚举常量的名称。(定义toString方法的返回值)//最有用的一个方法

String getClass(); 返回枚举常量的类。

String getDeclaringClass(); 返回声明枚举的枚举类型的类。

valueOf(enumType,name); 返回带指定枚举类型的枚举常量。

valueOf(name); 返回指定枚举类型的枚举常量。

values(); 返回枚举类型的所有枚举常量。


3. 枚举的使用方法

在枚举中,我们可以定义自己特有的字段,构造函数,以及特有的方法,也可以定义abstract方法,这个时候,在定义枚举值时,需要实现该抽象方法。
(1)定义字段
(2)定义带参数的构造函数

(3)定义抽象方法


4.张孝祥老师的枚举实例代码:



import java.util.Date;

public class EnumTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WeekDay1 weekDay = WeekDay1.MON;
		System.out.println(weekDay.nextDay());
		
		WeekDay weekDay2 = WeekDay.FRI;
		System.out.println(weekDay2);
		System.out.println(weekDay2.name());
		System.out.println(weekDay2.ordinal());	
		System.out.println(WeekDay.valueOf("SUN").toString());
		System.out.println(WeekDay.values().length);
		
		new Date(300){};
	}

	public enum WeekDay{

		SUN(1),MON(),TUE,WED,THI,FRI,SAT;
		private WeekDay(){System.out.println("first");}
		private WeekDay(int day){System.out.println("second");}
	}
	
	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;}
	}
}


在这段代码里,有很多的综合知识,以及书本上一笔带过的知识。精华就在交通灯
public enum TrafficLamp{……} 的那一段代码中。

枚举实例之间用逗号隔开,最后一个实例可以加分号,如果其后有方法或者域等就必须家分号,每个枚举常量后面的跟一对小括号(),代表调用相关方法,调用的方法由括号内的参数决定,枚举常量后面还可以跟一对大括号{........},此处相当于一个匿名内部类。

最后,老师还讲到了享元设计模式,对于设计模式,我想过一段时间将老师所讲过的所有设计模式做一个总结。

你可能感兴趣的:(黑马程序员--学习笔记之高新技术篇-枚举类)