一、概念:
实例有限而且固定的类,在java里被称为枚举类。
二、通过enum实现枚举类
使用enum定义的枚举类默认继承了java.lang.Enum类,而不是默认继承Object类。
定义方式如下:
//最简方式
public enum Weeks {
Monday, Tuesday, Wensday, Thursday, Friday, Satarday, Sunday
}
//有构造方法
public enum Weeks {
Monday("mon"), Tuesday("tue"), Wensday("wen"),
Thursday("thu"), Friday("fri"), Satarday("sat"), Sunday("sun");
private String name;
private Weeks(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
枚举的注意事项
- 定义枚举类要用关键字enum;
- 所有枚举类都是Enum的子类,所以枚举类可以实现接口,但是不能继承别的类;
- 枚举类的第一行上必须是枚举项,最后一个枚举项后以分号结束,可以省略,但是枚举类有其他成员时不能省略,建议不要省略。
- 枚举类可以有构造方法,但必须是private的,不写访问权限修饰符默认是private
private Weeks(){} //构造方法有参时,枚举项 必须重写该方法,如: private Weeks(String name){this.name=name;} //枚举项必须是这样的:Monday("mon"),Tuesday("tue"),Wensday("wen"),Thursday("thu"),Friday("fri"),Satarday("sat"),Sunday("sun")
- 枚举类可以有成员变量,这一点和普通类没什么不同
- 举类也可以有成员方法,这一点和普通类没什么不同
枚举类可以是抽象类,但是不能添加abstract修饰,如果枚举类有抽象方法,那么系统会为该枚举类自动添加abstract修饰。同时,枚举项必须通过匿名内部类形式,实现该抽象方法。这样,抽象枚举类依然可以调用枚举值。
三、枚举类的常见方式
-
两个静态方法
方法一:根据枚举实例名获取枚举实例对象
案例代码:public enum Weeks { Monday("星期一"), Tuesday("星期二"), Wensday("星期三"), Thursday("星期四"), Friday("星期五"), Satarday("星期六"), Sunday("星期日"); private String name; private Weeks(String name) { this.name = name; } public String toString() { return name; } } //测试类 public class Test { public static void main(String[] args) throws Exception { //根据枚举实例名获取枚举实例对象 Weeks weeks = Weeks.valueOf("Monday"); System.out.println(weeks.toString()); } }
方法二:获取枚举类中所有的实例对象
案例:public class Test { public static void main(String[] args) throws Exception { //根据枚举实例名获取枚举实例对象 Weeks[] values = Weeks.values(); for (int i = 0; i < values.length; i++) { System.out.println(values[i].toString()); } } }
-
三个成员方法
方法:
//获取枚举类实例对象名字,该方法是final的 String name = Weeks.Sunday.name(); //获取枚举类索引,从0开始,该方法是final的 int ordinal = Weeks.Sunday.ordinal(); //两个枚举类比较大小,实例对象在类中,先出现的小于后出现的。,该方法是final的 int result = Weeks.Sunday.compareTo(Weeks.Satarday);
代码:
public class Test { public static void main(String[] args) throws Exception { //获取枚举类实例对象名字,该方法是final的 String name = Weeks.Sunday.name(); //获取枚举类索引,从0开始,该方法是final的 int ordinal = Weeks.Sunday.ordinal(); //两个枚举类比较大小,实例对象在类中,先出现的小于后出现的。,该方法是final的 int result = Weeks.Sunday.compareTo(Weeks.Satarday); System.out.println("枚举类实例对象名字:" + name + "\n" + "枚举类索引:" + ordinal + "\n" +"两个枚举类比较大小,实例对象在类中,先出现的小于后出现的:" + result); } }
网友评论