黑马程序员 java基础加强——jdk1.5新特性—枚举

原创 2013年12月02日 16:00:02

----------- android培训java培训java学习型技术博客、期待与您交流! ------------



jdk1.5新特性—枚举


一:枚举作用:枚举的作用就是要让某个类型的变量只能取若干固定值中的一个。否则,编译就会报错。枚举可以让编译器在编译时就控制程序的填写的值是否合法,

而普通变量没有办法达到这一步,所以枚举应运而生。

二:案例:

比如一个项目中表示星期,如果用普通变量,则可能有人用1—7表示星期一到星期日,但也有可能有人用0-6来表示,这样程序就会变得很麻烦,采用枚举就可以轻松的解决。

三:代码案例

a:用普通类来模拟枚举:定义一个Weekday来模拟枚举类的功能。

package cn.itcast.day1;

public abstract class WeekDay1 {
	private WeekDay1(){}
	
	public final static WeekDay1 SUN = new WeekDay1(){

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

		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return SUN;
		}
		
	};	
	
	public abstract WeekDay1 nextDay();
	
/*	public WeekDay nextDay(){
		if(this == SUN){
			return  MON;
		}else{
			return SUN;
		}
	}
*/
	
	public String toString(){
		return this==SUN?"SUN":"MON";
	}
}

分析:1,因为数据元素为固定的,所以要把构造函数私有化,防止外部来new出 别的实例对象。

             2,为了方便外部的访问,把实例变量定义为共有的静态的成员变量

             3,可以有若干共有方法和抽象方法,例如本例中的nextDay就要定义为抽象的。需要不同的子类来实现。


四:枚举的基本应用

1,代码

package cn.itcast.day1;

public class EnumTest {

	public static void main(String[] args) {
		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);
		
	}

	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;}
	}
}
运行结果:
SUN
second
first
first
first
first
first
first
FRI
FRI
5
SUN
7

 
分析:枚举封装了一些方法:

a:name()返回实例变量的名称,toStirng()方法返回的也是。

b:ordinal()方法返回实例成员的位置,第几个就返回几。

c:valueOf(String str)将参数里的String类型的字符串转变成同名的枚举类型的对象,这个很重要,比如在网页的应用中,用户提交的都是字符串,就需要我们把它转化为枚举,继而在经行处理。

d:values()返回封装了实例成员的数组,拿到数组后可以遍历每一个元素,进行操作。


五:带有构造方法和抽象方法的枚举

1,代码:

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;}
	}

分析:

1,enum是枚举的关键字,类似于class

2,构造函数必须私有

3,实例后的括号代表实例在初始化的时候,调用哪个构造函数。缺省为调用空的构造函数。例如在Weekday中MON与MON()是一样效果的

3,每个元素是枚举子类生成的实例对象,这些对象都采用内部类的方式



           ---- ASP.Net+Android+IOS开发.Net培训、期待与您交流!--------详细请查看:http://edu.csdn.net------






相关文章推荐

黑马程序员基础加强——JDK1.5的新特性: 自动拆箱和机制 枚举

---------------------- android培训、java培训、期待与您交流! ----------------------        JDK1.5的新特性  : 自动拆箱...

黑马程序员--Java基础加强(2)-- JDK1.5新特性之可变参数,增强for,自动拆装箱,枚举

JDK1.5新特性之可变参数,增强for,自动拆装箱,枚举 一、 可变参数 1、当一个方法,需要的参数不确定时,可以使用可变参数,比如add方法,希望传入几个参数就让这几个参数相加,声明形式: pub...

黑马程序员—【Java高新技术】之eclipse开发工具枚举及JDK1.5新特性

------- android培训、java培训、期待与您交流! ---------     今天分享这篇为张孝祥老师的Java高新技术篇,这篇主要总结枚举、eclipse开发工具和JDK1.5...
  • WL8721
  • WL8721
  • 2015年04月28日 19:33
  • 547

Java基础---枚举及部分JDK1.5新特性 (黑马程序员)

第一讲     枚举 一、概述         这里说的枚举,不是集合vector的特有枚举迭代器,而是JDK1.5的一个新特性。之所以单独拿它开刷,是这个知识点比较重要,同时相对来说比较难理...

黑马程序员—JDK1.5新特性之枚举enum

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------...

黑马程序员——高新技术---枚举及部分JDK1.5新特性

第一讲     枚举 一、概述         这里说的枚举,不是集合vector的特有枚举迭代器,而是JDK1.5的一个新特性。之所以单独拿它开刷,是这个知识点比较重要,同时相对来说比较...

黑马程序员——java基础---JDK1.5新特性

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Jdk1.5新特性 一,自动装箱与拆箱 Java有基本数据类型,在这些基本数据类型周围又...

黑马程序员——Java基础:反射、JDK1.5新特性、正则表达式

注:前面所有总结都是通过毕向东老师所讲的视频所得。反射部分由张孝祥老师所讲。 一、反射 反射 :是指程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类...

黑马程序员——JAVA基础之JDK1.5新特性高级for循环和可变参数

------- android培训、java培训、期待与您交流! ----------     高级for循环   格式:   for(数据类型 变量名 : 被遍历的集合(Coll...

黑马程序员——JAVA基础之基本数据类型包装类和1.5JDK新特性装箱

------- android培训、java培训、期待与您交流! ----------   基本数据类型包装类:   byte Byte short Short in...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员 java基础加强——jdk1.5新特性—枚举
举报原因:
原因补充:

(最多只允许输入30个字)