码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员_枚举总结

时间:2015-04-18 20:21:46      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

/*

1、枚举:枚举就是一个类,也即一种数据类型,引用数据类型。只不过是一个特殊的类。
这个类的引用(变量)或者这种数据类型的变量(引用),它的值是由定义该数据类型的人来指定的,即
它的取值是在枚举中定义好的,就那么几个值,如果不是这些列出来的值,编译器在编译的时候就会报错。

2、枚举的好处:将一种数据类型的所有取值限定在指定范围内。使得该数据类型的变量在取值时,不会出现非法赋值的
情况,如果有,则可以在编译时期就被发现,避免了一些错误赋值导致的问题发生。

3、枚举的定义:
enum 枚举类型名 //枚举是一种特殊的类,所以其和普通类一样,如果定义在外部,则可被public/默认修饰,如果
//定义在内部成员位置上,则可以被public/protected/默认/private修饰。
{
枚举元素1,枚举元素2,枚举元素3,.....,枚举元素n;
//所有的枚举元素都是本类的一个引用,指向的是该类对象或者该类的子类对象。且都是
//公共静态常量(即public final static)

成员;
//包括成员方法和成员变量的定义,包括构造函数在内。所有的成员定义都必须在枚举元素列表的后面定义。
//另:构造方法默认是空参数的构造方法,且是私有的(private),如果要自定义构造方法,则也必须声明
//为私有(即private)。

}

4、枚举的用法:枚举是一种特殊的类,所以用法和类是一致的。即 枚举类型名 枚举变量名 = 枚举类型名.枚举元素名。

5、枚举实现的原理:可以通过普通类来模拟枚举的实现原理。

实现过程中关键字:静态常量,私有化构造方法,本类对象,属于本类的对象的成员方法


package cn.itcast.day25;

//自定义类来模拟枚举类

class WeekDay
{
	private WeekDay(){}//禁止外部创建本类对象

	public final static WeekDay SUN = new WeekDay(); //定义本类引用的所有取值。
	public final static WeekDay MON = new WeekDay();
	public final static WeekDay TUS = new WeekDay();
	public final static WeekDay WEN = new WeekDay();
	public final static WeekDay THI = new WeekDay();
	public final static WeekDay FRI = new WeekDay();
	public final static WeekDay SAT = new WeekDay();

	public WeekDay nextDay()
	{
		if(this == SUN)
			return MON;
		if(this == MON)
			return TUS;
		if(this == TUS)
			return WEN;
		if(this == WEN)
			return THI;
		if(this == THI)
			return FRI;
		if(this == FRI)
			return SAT;
		return SUN;
	}
	public String toString()
	{
		if(this == SUN)
			return "SUN";
		if(this == MON)
			return "MON";
		if(this == TUS)
			return "TUS";
		if(this == WEN)
			return "WEN";
		if(this == THI)
			return "THI";
		if(this == FRI)
			return "FRI";
		return "SAT";
	}
}
public class EnumTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
		WeekDay day = WeekDay.SUN;
		System.out.println(day.nextDay());
	}
	

}

  

 

 

  6、用JDK中的enum定义自定义的枚举类TrafficLamp

public abstract enum TrafficLamp
	{
		RED(30) //默认的不带参数的构造方法不存在了,所以必须指定是调用哪一个带参数的构造方法,用"()"标明。
		{
			public TrafficLamp nextLamp()
			{
				return GREEN;
			}
		},
		GREEN(30)
		{			//"{}"表示GREEN,这个元素指向的是TrafficLamp的子类的对象,子类为匿名内部类,
					//实现了父类的抽象方法,且根据"(30)"在创建该子类对象时,通过子类对象的不带参数的构造函数(即默认
					//构造函数)调用父类TrafficLamp的带参数的构造函数"Traffic(int)"。

			public TrafficLamp nextLamp()
			{
				return YELLOW;
			}
		},
		YELLOW(5)  //这条语句会做这样的事情:
				   //定义了一个匿名内部类,其父类是TrafficLamp,并且创建了一个该匿名内部类的对象,最后将该对象
				   //赋值给了父类TrafficLamp的引用YELLOW。
		{
			public TrafficLamp nextLamp()
			{
				return RED;
			}
		};  //最后面的这个分号必须有,表示以上是定义枚举元素列表。

		public abstract TrafficLamp nextLamp(); //抽象方法

		private int time; //私有成员变量

		private TrafficLamp(int time) //1,构造方法必须被私有 2,默认的不带参数的构造方法不存在了
		{this.time = time;} 
	}
	//编译后的源文件一共会有四个类文件(.class文件),即:
	//					TrafficLamp.class 、TrafficLamp$1.class 、TrafficLamp$2.class 、TrafficLamp$3.class 

  


7、java中JDK提供的枚举中常用方法:
valueOf(),values(),toString(),getClass(),getName()等。

*/

 

黑马程序员_枚举总结

标签:

原文地址:http://www.cnblogs.com/wllbelief-win/p/4437867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!