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