----------------------
ASP.Net+Android+IOS开发</a>、
.Net培训、期待与您交流! ----------------------
当枚举只有一个成员时,就可以作为一种单例的实现方式
---------------------- ASP.Net+Android+IOS开发</a>、 .Net培训、期待与您交流! ----------------------
枚举
在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有四个对象。这种实例有限而且固定的类,在Java里被称为枚举类
枚举的特点
枚举类中声明的每一个枚举值代表枚举类的一个实例对象
枚举类的构造器默认构造器使用private访问修饰符(因为不允许在枚举类外创建对象)
枚举类的所有对象都必须在枚举类中显示列出且要放在行首。这些对象,默认被public static final修饰
所有枚举类都提供了一个values()方法(API文档中查不到),返回枚举中所有对象的集合,该方法可以很方便的遍历所有枚举对象
枚举类可以有方法和属性,可以实现一个或多个接口,也可以定义自己的构造器(默认private修饰)
使用enum定义的枚举默认继承了java.lang.Enum类
/**
枚举
*/
//定义一个WeekDay枚举类,包含7个元素,每个元素都是WeekDay的对象
enum WeekDay
{
SUN, MON, TUE, WED, THU, FRI, SAT;
}
class EnumTest
{
public static void main(String[] args)
{
WeekDay weekDay = WeekDay.FRI;
System.out.println(weekDay); //toString()
System.out.println(weekDay.name());
System.out.println(weekDay.ordinal()); //序数
//使用静态方法valueOf()把字符串变为枚举中存在的同名对象
System.out.println(WeekDay.valueOf("SUN"));
//values()返回枚举中所有对象到数组中WeekDay[]
System.out.println(WeekDay.values().length);
}
}
带有构造函数的枚举
枚举类中,元素须放在首行,枚举类中的元素可以使用带参的构造函数。枚举中所有构造函数默认即被private修饰,无法从外部创建对象
/**
带构造函数的枚举
*/
//定义一个WeekDay枚举类,包含7个元素,每个元素都是WeekDay的对象
enum WeekDay2
{
//元素必须放在首行
SUN(3), MON(), TUE, WED, THU, FRI, SAT;
//构造函数只能使用private修饰
private WeekDay2()
{
System.out.println("first");
};
//带参的构造函数
private WeekDay2(int num)
{
System.out.println("second");
}
}
class EnumTest2
{
public static void main(String[] args)
{
WeekDay2 wd = WeekDay2.FRI;
}
}
实现抽象方法的枚举
枚举中可以定义成员变量、构造方法、方法、抽象方法
每一个枚举类中的枚举元素都可以通过内部类的形式实现抽象方法
/**
实现抽象方法的枚举
*/
enum TrafficLamp
{
//三个元素RED、GREEN、YELLO,构造函数初始化并实现了抽象方法
RED(30)
{
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN(45)
{
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW(5)
{
public TrafficLamp nextLamp()
{
return RED;
}
};
//私有成员变量
private int time;
//构造函数
private TrafficLamp(int time)
{
this.time = time;
}
//抽象方法
public abstract TrafficLamp nextLamp();
}
class TrafficLampTest
{
public static void main(String[] args)
{
TrafficLamp red = TrafficLamp.RED;
System.out.println(red.nextLamp());
}
}
注意:
当枚举只有一个成员时,就可以作为一种单例的实现方式
---------------------- ASP.Net+Android+IOS开发</a>、 .Net培训、期待与您交流! ----------------------