黑马程序员_java基础加强学习之枚举

来源:互联网 发布:欢乐逛软件 编辑:程序博客网 时间:2024/06/07 01:31

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

1.5的新特性:枚举

枚举就是一个类,枚举的成员就是类的实例对象。

枚举的作用:

枚举可让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在编程时无法实现。

(假设用1~7分别表示星期一到星期日,但有人可能会写成int weekDay = 0;即便使用常量方式也无法阻止意外。)

例子:自定义weekDay.
import java.util.Date;
public abstract class EnumTest {
public static void main(String[] args) {
WeekDay1weekDay =WeekDay1.MON;
System.out.println(weekDay.nextDay());
//只能给定义枚举方法中指定的的元素。
WeekDay weekDay2 = WeekDay.FRI;
//枚举自动帮我们实现了toSting方法,这是我们的好处。
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);    //values方法将枚举类对象变成数组。
newDate(300){};
}
//元素列表必须位于所有成员之前,构造方法必须是私有的。
//若要指明用第二个构造函数,在元素后面直接跟上一对有参数的圆括号。指定参数列表。

//若元素后跟上一对括号无参数,可用于表示不带参数的构造方法。

//枚举类

public enum WeekDay{

SUN(1),MON(),TUE ,THI,FRI, SAT;

//无参构造方法

private WeekDay(){
System.out.println("first");

}

//重载构造方法

private WeekDay(intday){
System.out.println("second");}
}

//定义枚举TrafficLamp,实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象。
//3个元素,每个元素都是由子类来写的 ,子类必须完成父类的抽象方法。

public enum TrafficLamp{

//红灯、绿灯、黄灯,后面出现{}是因为这些成员由其子类来实现

RED(30){

//匿名内部类实现弗雷的抽象方法

public TrafficLamp nextLamp(){
returnGREEN;}
},
GREEN(45){
public TrafficLamp nextLamp(){
returnYELLOW;}
},
YELLOW(5){
public TrafficLamp nextLamp(){
returnRED;}

};

//抽象方法
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp (int time){this.time=time;}
}
}
public abstract classWeekDay1 {
private WeekDay1(){}
//以下为匿名内部类。用了抽象类把nextDay分别转成一个个独立的类。
//每个元素分别用一个公有的静态成员变量表示。
public final staticWeekDay1 SUN=newWeekDay1(){
publicWeekDay1 nextDay(){
returnMON;
}
};
public final staticWeekDay1 MON=new WeekDay1(){
publicWeekDay1 nextDay(){
returnTUE;
}
};
public final staticWeekDay1 TUE=new WeekDay1(){
publicWeekDay1 nextDay(){
return WED;
}
};
......
public final static WeekDay1 SAT=new WeekDay1(){
public WeekDay1 nextDay(){
returnSUN;
}
};


//方法是静态的,类也必须是静态的。
//采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
public abstractWeekDay1 nextDay();
publicString toString(){
if(this==SUN)
return"SUN";
else if (this==MON)
   return"MON";
......
else if (this==SAT)
 return "SAT";
 
else return null
}

}

总结1.枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象。

2.枚举相当于一个类,其中可以定义构造方法。成员变量、普通方法和抽象方法。

3.构造方法必须定义成私有的。如果有多个构造方法,都是调用默认的构造方法。

4.当枚举只有一个成员时,就可以作为一个单例的实现方式。

5.枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把美剧中的成员方法或变量等放在枚举元素的前面,编译报告错误。

0 0
原创粉丝点击