您的位置:首页 > 编程语言 > Java开发

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

2013-12-02 16:00 513 查看
----------- 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------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息