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

黑马程序员-JAVA基础之枚举

2015-08-30 04:10 429 查看
——- android培训、java培训、期待与您交流! ———-

什么是枚举?

现实中有这么一类是事物,它们只能取有限固定的值,比如星期几、性别、交通灯等等。java就针对这类事物定义了一个新的特性——枚举,它是一种特殊的类。

比如要定义星期几或性别的变量,该怎么定义?假设用1—7分别表示星期一到星期日,但有人可能会写成:int weekday=0;

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

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

枚举的特点:

1.私有构造方法。

2.每个元素分别用一个共有的静态成员变量表示。

3.可以有若干个公有方法和抽象方法。

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

带构造方法的枚举

* 1、构造方法必须定义成私有的

* 2、如果有多个构造方法,该如何选择哪个构造方法?

* 3、枚举元素MON和MON()的效果一样,都是调用默认的构造方法

带方法的枚举

* 1、定义枚举的TrafficLamp

* 2、实现普通的Lamp方法

* 3、实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义

* 4、增加上表示时间的构造方法

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

public class EnumTest
{
public static void main(String[] args)
{
WeekDay weekDay2=WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());
System.out.println(WeekDay.valueOf("SUN"));
System.out.println(WeekDay.values().length);

new Date(300){};
}
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");}
}
}


枚举中定义的交通灯有RED,GREEN,YELLOW三个值,意味着enum中事先定义了3个交通灯对象,而且只有这3个交通灯对象,因为构造方法是私有的。由于这3个对象可以由枚举名直接获取,所以这3个对象是静态的。

public enum TrafficLamp{
RED,GREEN,YELLOW;
}
TrafficLamp tl = TrafficLamp.GREEN;
System.out.println(tl);


枚举中可以定义抽象方法,这个抽象方法由其子类实现,枚举在建立3个对象时用内部类的形式继承带有抽象方法的枚举,实现抽象方法。

public enum TrafficLamp{
RED(20),GREEN(30),YELLOW(3);
private TrafficLamp(){}
private TrafficLamp(int time){
System.out.println(time);
}
}
<span style="white-space:pre">    </span>public enum TrafficLamp{
RED(20) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}
},
GREEN(30) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}
},
YELLOW(3) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
};
private TrafficLamp(){}
private TrafficLamp(int time){
System.out.println(time);
}
public abstract TrafficLamp nextLamp();
}


——- android培训、java培训、期待与您交流! ———-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 黑马程序员