您的位置:首页 > 编程语言 > Java开发

Java--枚举(Enum)JDK1.5新特性

2017-03-16 13:36 543 查看
定义枚举类要用关键字enum
所有枚举类都是Enum的子类
枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
枚举类可以有构造器,但必须是private的,它默认的也是private的。
枚举类也可以有抽象方法,但是枚举项必须重写该方法
枚举在switch语句中的使用
一、自定义枚举类
1、无参
public class Week {
//第一种方法,无参构造
public final static Week Mon = new Week();
public final static Week TUE = new Week();
public final static Week WED = new Week();
private Week(){} //私有构造,不让其他类创建本类
@Override
public String toString() {
return "Week [toString()=" + super.toString() + "]";
};
}2、有参
public class Week2 {
//第二种方法,有参构造
private String name;
public final static Week2 Mon = new Week2("星期一");
public final static Week2 TUE = new Week2("星期二");
public final static Week2 WED = new Week2("星期三");
private Week2(String name){
this.name = name;
} //私有构造,不让其他类创建本类

public String getName() {
return name;
}

@Override
public String toString() {
return "Week2 [name=" + name + "]";
}
}3、抽象类,内部类
public abstract class Week3 {
//第三种方法抽象类,匿名内部类
private String name;
public final static Week3 Mon = new Week3("星期一"){
@Override
public void show() {
System.out.println("星期一");
}
};
public final static Week3 TUE = new Week3("星期二"){
@Override
public void show() {
System.out.println("星期二");
}
};
public final static Week3 WED = new Week3("星期三"){
@Override
public void show() {
System.out.println("星期三");
}
};
private Week3(String name){
this.name = name;
} //私有构造,不让其他类创建本类

public abstract void show();
}
使用
public class EnumDemo {

public static void main(String[] args) {
demo1();
demo2();
demo3();
}

private static void demo3() {
System.out.println("-------------第三种抽象类,匿名内部类-------------");
Week3 mon = Week3.Mon;
mon.show();
}

private static void demo2() {
System.out.println("-----------------第二种有参构造------------------");
Week2 mon = Week2.Mon;
Week2 tue = Week2.TUE;
Week2 wed = Week2.WED;
System.out.println(mon.getName());
System.out.println(tue.getName());
System.out.println(wed.getName());
}

private static void demo1() {
Week mon = Week.Mon;
Week tue = Week.TUE;
Week wed = Week.WED;
System.out.println(mon);
System.out.println(tue);
System.out.println(wed);
}
}二、系统枚举类Enum关键字
1、无参
public enum Week {
//系统第一种空参
MON,TUE,WED;
}2、有参
public enum Week2 {
//系统第一种空参
MON("星期一"),TUE("星期二"),WED("星期三");
private String name;
private Week2(String name){
this.name = name;
}
public String getName() {
return name;
}
}
3、抽象类,内部类
public enum Week3 {
//系统第一种空参
MON("星期一"){
@Override
public void show() {
System.out.println("星期一");
}
},TUE("星期二"){
@Override
public void show() {
System.out.println("星期二");
}
},WED("星期三"){
@Override
public void show() {
System.out.println("星期三");
}
};
private String name;
private Week3(String name){
this.name = name;
}
public abstract void show();
}使用
public class EnumDemo {

public static void main(String[] args) {
demo1();
demo2();
demo3();
demo4();
demo5();
}

private static void demo5() {
/*
枚举类的常见方法
int ordinal()
int compareTo(E o)
String name()
String toString()
<T> T valueOf(Class<T> type,String name)
values()
* */
System.out.println("-------------常用方法--------------");
Week2 mon = Week2.MON;
Week2 tue = Week2.TUE;
Week2 wed = Week2.WED;

System.out.println(mon.ordinal()); //获取枚举项编号
System.out.println(tue.ordinal());
System.out.println(wed.ordinal());

System.out.println(mon.compareTo(tue)); //比较枚举编号
System.out.println(mon.compareTo(wed));

System.out.println(mon.name()); //获取实例名称

System.out.println(mon.toString()); //调用重写之后的toString()方法

Week2 mon1 = Week2.valueOf(Week2.class, "TUE");
System.out.println(mon1);

System.out.println("--遍历--");
Week2[] arr = Week2.values();
for (Week2 week2 : arr) {
System.out.println(week2);
}
}

private static void demo4() {
Week3 mon = Week3.MON;
switch (mon) {
case MON:
System.out.println("星期一");
break;
case TUE:
System.out.println("星期二");
break;
case WED:
System.out.println("星期三");
break;
default:
break;
}
}

private static void demo3() {
System.out.println("-----------系统第三种------------");
Week3 mon = Week3.MON;
mon.show();
}

private static void demo2() {
System.out.println("-----------系统第二种------------");
Week2 mon = Week2.MON;
System.out.println(mon.getName());
}

public static void demo1() {
Week mon = Week.MON;
System.out.println(mon);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: