------- android培训、java培训、期待与您交流! ----------
JDK1.5之后,引入了一个新的关键字类型 enum,称为枚举类型
使用格式如下
public enum 枚举类型名称{
枚举对象1,枚举对象2,...,枚举对象n;
}
在JDK 1.5之前,JAVA可以有两种方式定义新类型:类和接口。对于大部分面向对象编程来说,这两种方法看起来似乎足够了。但是如果想要定义几个有一定范围的值,用enum比较方便也非常简单
比如在设计多例设计模式,用枚举与否的区别
普通实现范例
输出结果
class Weekday {
private static final Weekday SUN = new Weekday("星期天") ;//创建多个实例
private static final Weekday MON = new Weekday("星期一") ;
private String title ;
private Weekday(String title) {//私有构造方法
this.title = title ;
}
public String toString() {//重写toString
return this.title ;
}
public static Weekday getInstance(int ch) {//获取实例
switch(ch) {
case 0 :
return SUN ;
case 1 :
return MON ;
default :
return null ;
}
}
}
public class EnumTest {
public static void main(String[] args){
Weekday d = Weekday.getInstance(0) ;
System.out.println(d);
}
}
输出结果
星期天
使用枚举enum实现范例
输出结果
enum Weekday {
SUN,MON ;//定义枚举变量
}
public class EnumTest {
public static void main(String[] args){
Weekday d = Weekday.SUN ;//获取Weekday实例
System.out.println(d);
}
}
输出结果
SUN
通过对比,很明显,利用枚举来实现的多例说呢及模式会更加简单明了
但实际上用enum来定义的类实际上继承了Enum类
而Enum类的定义
而枚举类在继承Enum后比较的父类方法有:
public abstract class Enum<E extends Enum<E>>
extends Object
implements Comparable<E>, Serializable
而枚举类在继承Enum后比较的父类方法有:
public final int ordinal():取得枚举的序号
public finally String name():取得枚举的名称
范例enum Weekday {
SUN,MON ;//定义枚举实例
}
public class EnumTest {
public static void main(String[] args){
Weekday d = Weekday.SUN ;//获取Weekday实例
for(Weekday w:Weekday.values()){//取得所有实例,用增强for输出
System.out.println("序号-" + w.ordinal() + "-名称是--->" + w.name());
}
}
}
SUN,MON ;//定义枚举实例
}
public class EnumTest {
public static void main(String[] args){
Weekday d = Weekday.SUN ;//获取Weekday实例
for(Weekday w:Weekday.values()){//取得所有实例,用增强for输出
System.out.println("序号-" + w.ordinal() + "-名称是--->" + w.name());
}
}
}
输出结果
序号-0-名称是--->SUN
序号-1-名称是--->MON
序号-1-名称是--->MON
枚举跟其他类的同样也包括了定义属性,方法,构造方法,但是构造方法必须要私有化,而且还可以定义抽象方法
范例
enum Weekday {
SUN("星期天"){//枚举对象实例化并实现抽象方法
public String getDay(){
return this.day;
};
},MON("星期一"){
public String getDay(){
return this.day;
};
} ;//定义枚举实例
String day;
private Weekday(String day){
this.day = day;
}
public String toString(){
return this.day; //重写toString方法
}
public abstract String getDay();//定义抽象方法
}
public class EnumTest {
public static void main(String[] args){
Weekday d = Weekday.SUN ;//获取Weekday实例
for(Weekday w:Weekday.values()){//取得所有实例,用增强for输出
System.out.println("序号-" + w.ordinal() + "-名称是--->" + w);
}
}
}
输出结果
序号-0-名称是--->星期天
序号-1-名称是--->星期一
序号-0-名称是--->星期天
序号-1-名称是--->星期一
序号-0-名称是--->星期天
序号-1-名称是--->星期一
------- android培训、java培训、期待与您交流! ----------