26,高新技术——jdk 1.5新特性枚举
26.1 定义枚举类型
格式:权限修饰符 enum 枚举类名{
枚举对象1,枚举对象2,……;
}
枚举的作用:用于限定对象的取值范围。
enum 关键字用于声明一个枚举类型,实际上就是定义了一个继承Enum类的类。
如:
public enum Week {
MON,TUE,WED,THU,FRI,SAT,SUN;//枚举类中的元素,相当于一个个枚举类的对象。
}
枚举类型的特点:
1, 枚举类的构造函数是private权限的。
2, 枚举类可以实现接口或内部定义抽象方法,但不能继承其他类。因为,枚举类型默认继承Enum类。
3, 如果定义了抽象方法,那么枚举类中的对象要覆盖这些方法。
26.2 枚举类的静态方法
enum 关键字定义的枚举类默认继承Enum类,就拿到了Enum类中的所有方法。
valueOf(String str);
将字符串枚举常量名,转成枚举对象实体。
values();
返回一个包含所有枚举常量的数组。
如:
package Default;
public class MyEnum{
public static void main(String[] args)throws ClassNotFoundException {
Week [] weeks=Week.values();//获取一个包含所有枚举常量的数组.
for(Week week:weeks){//遍历这个数组。
System.out.println(week);
}
Week mon=Week.valueOf("MON");//把任意字符串枚举常量转成枚举对象.
System.out.println(mon);
}
}
enum Week{//定义一个枚举类
MON,TUE,WED,THU,FRI,SAT,SUN;
}
26.3 枚举类的常用非静态方法
toString();
返回此枚举常量的名称。
String name();
返回此枚举常量的名称
int ordinal();
返回此枚举常量的序数,从0开始。
如:
package Default;
public class MyEnum{
public static void main(String[] args)throws ClassNotFoundException {
Week [] weeks=Week.values();
for(Week week:weeks){
System.out.println(week.name());//返回枚举常量的字符串名称.
System.out.println(week.ordinal());//返回枚举常量的序数.
System.out.println(week.toString());//返回枚举常量的字符串名称.
}
}
}
enum Week{
MON,TUE,WED,THU,FRI,SAT,SUN;
}
26.4 枚举类中可以定义构造函数、抽象方法、实现其他接口。
注意:枚举类中的构造函数默认是private权限的。枚举类中的构造函数不能是:public和protected。
枚举类中定义了抽象方法,每个枚举常量都要覆盖抽象方法。
枚举类如果实现了某些接口,每个枚举常量都要覆盖接口中的方法或者只由枚举类覆盖接口中的方法。
如:
package Default;
public lass MyEnum {
public static void main(String[] args)throws ClassNotFoundException {
Week [] weeks=Week.values();
for(Week week:weeks){
System.out.println(week.getWeek());
}
}
}
enum Week implements Inter {//创建枚举对象,并实现接口
MON() {
@Override
public String getWeek() {//分别覆盖接口中的抽象方法.
return"星期一";
}
},
TUE() {
@Override
public String getWeek() {
return"星期二";
}
},
WED() {
@Override
public String getWeek() {
return"星期三";
}
},
THU() {
@Override
public String getWeek() {
return"星期四";
}
},
FRI() {
@Override
public String getWeek() {
return"星期五";
}
},
SAT() {
@Override
public String getWeek() {
return"星期六";
}
},
SUN() {
@Override
public String getWeek() {
return"星期日";
}
};
private String value;
private Week() {//枚举类中定义构造函数.
}
}
interface Inter {//创建一个接口.
String getWeek();
}
26.5 使用枚举实现单例设计模式.
枚举实现单例设计模式会相对比较方便,只需要在枚举类中定义一个常量,就可以完成单例设计模式.省去了私有化构造函数和对外提供获取实体的公共方法的步骤.
如:
package Default;
public class MyEnum {
public static void main(String[] args)throws ClassNotFoundException {
SingleInstance s1=SingleInstance.SINGLE;
SingleInstance s2=SingleInstance.SINGLE;
SingleInstance s3=SingleInstance.SINGLE;
System.out.println(s1==s2);
System.out.println(s1==s3);
}
}
enum SingleInstance{
SINGLE;//只要定义一个枚举常量.
}
/*
打印结果:
true
true*/
由此可见,使用枚举可以轻松实现单例设计模式.
总结:Java中除了类和接口外,还可以定义枚举类型.当需要限定对象的取值范围时,就可以使用枚举.
---------------------- ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ----------------------