您的位置:首页 > 职场人生

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

2013-12-11 12:43 537 查看
------- <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.枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把美剧中的成员方法或变量等放在枚举元素的前面,编译报告错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: