枚举
枚举(enumeration,enum)是一组常量的集合,可以理解为一种特殊的类,里面只包含一组有限的特定的对象。
这组对象的特点,有限个值,只读,不需要修改
两种实现方式
1)使用自定义类实现枚举
2)使用enum关键字实现枚举
// 以一周7天为例
public class Test {
public static void main(String[] args) {
System.out.println(MyWeek.MONDAY);
System.out.println(MyWeek.TUESDAY);
System.out.println(MyWeek.WEDNESDAY);
System.out.println(MyWeek.THURSDAY);
System.out.println(MyWeek.FRIDAY);
System.out.println(MyWeek.SATURDAY);
System.out.println(MyWeek.SUNDAY);
System.out.println("++++++++++++++++++++++++");
for (Week value : Week.values()){
System.out.println(value.getName());
}
}
}
// 使用自定义类实现枚举
class MyWeek{
private String name;
public final static MyWeek MONDAY = new MyWeek("星期一");
public final static MyWeek TUESDAY = new MyWeek("星期二");
public final static MyWeek WEDNESDAY = new MyWeek("星期三");
public final static MyWeek THURSDAY = new MyWeek("星期四");
public final static MyWeek FRIDAY = new MyWeek("星期五");
public final static MyWeek SATURDAY = new MyWeek("星期六");
public final static MyWeek SUNDAY = new MyWeek("星期日");
private MyWeek(){
}
private MyWeek(String name){
this.name = name;
}
public String getName(){
return this.name;
}
@Override
public String toString() {
return this.name;
}
}
//使用enum关键字实现枚举
enum Week{
MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),
THURSDAY("星期四"),FRIDAY("星期五"),SATURDAY("星期六"),
SUNDAY("星期日");
private String name;
private Week(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
枚举的注意事项
1)构造器私有化
2)本类内部创建一组对象
3)对外暴露对象,让外界可以进行访问
4)提供get方法,不提供set方法
5)当我们使用enum关键字时,默认会继承Enum类,而且是一个final类
6)传统方式被简化
// 简化前
public final static MyWeek MONDAY = new MyWeek("星期一");
// 简化后
MONDAY("星期一");
7)当有多个枚举对象时,使用,隔开,最后;结尾
8)枚举对象必须放在枚举类的首行
说明
1)枚举对象通常只读,不需要提供set方法
2)对枚举对象或属性使用final static共同修饰,可以进行底层优化
3)枚举对象名通常全部使用大写字母,常量的命名规范
4)枚举对线可以有多个方法和属性
Enum类
当我们使用enum关键字时,默认会继承Enum类,其有很多常用的方法
1)toString()返回对象的属性信息,子类可以重写
2)name()返回当前对象名,子类不能重写
3)ordinal()返回当前对象的位置号,默认从0开始
4)values()返回当前枚举类中的所有常量
5)valueOf()将字符串转换成枚举对象,须为已有的常量名,否则报错
6)compareTo()将两个枚举常量的位置号进行比较
A.compareTo(B);
A的位置号-B的位置号
其他可见Enum类中源码自行进行分析
标签:MyWeek,name,public,枚举,static,final From: https://blog.51cto.com/u_16188762/6836833