1、 枚举
1.1 定义
- 枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是默认继承Object类,因此枚举类不能显示继承其他父类。其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。
- 使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类。
- 枚举类的构造器只能使用private访问控制符,如果省略了构造器的访问控制符,则默认使用private修饰;如果强制指定访问控制符,则只能指定private修饰符。
- 枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远都不能产生实例。列出这些实例时,系统会自动添加public static final 修饰,无须程序员显式添加。
- 枚举类默认提供了一个values()方法,该方法可以很方便地遍历所有的枚举值
1.2 语法
- 枚举的构造器是私有的
- 枚举只能在自己的首行代码实例化自己的对象
- 枚举的实例对象,默认会加上public static final修饰
- 用法:枚举名.实例 Week.MONDAY;
public enum Week{//规定只能有几个实例
//这些大写字母表示就是枚举的实例对象;7个对象
MONDAY, TUESDAY, WEDNESDAY,THURSDAY,FRIDAY,SATURADAY,SUNDAY;
//MONDAY:就是一个具体的对象; public static final Week MONDAY = new Week();
public void test(){
System.out.println("枚举里面的test方法");
}
public void test1(){
System.out.println("枚举里面的test1方法"+this.name());
}
}
//测试类
public class TestEnum {
public static void main(String[] args) {
//这两个的输出是不一样的
Week.MONDAY.test();//输出:枚举里面的test方法
Week.FRIDAY.test();//输出:枚举里面的test方法
System.out.println(Week.MONDAY == Week.FRIDAY);//false
Week.MONDAY.test1();//输出:枚举里面的test方法MONDAY
Week.FRIDAY.test1();//输出:枚举里面的test方法FRIDAY
}
}
//枚举的应用
public enum Week1 {
//枚举的首行是枚举的实例;等同于Week MONDAY = new Week("周一");
MONDAY("周一"), TUESDAY("周二"), WEDNESDAY("周三"),THURSDAY("周四"),FRIDAY("周五"),SATURADAY("周六"),SUNDAY("周日");
private String ch;
private Week1(String ch){
this.ch = ch;
}
public String getPt() {
return ch;
}
}
//测试类
public class TestEnum1 {//枚举的应用
public static void main(String[] args) {
// System.out.println(Week1.MONDAY.ch);//ch用private封装起来,只能用get方法访问
System.out.println(Week1.MONDAY.getPt());
System.out.println(Week1.FRIDAY.name());//得到当前实例的名字; 实例的名字就是实例本身的字符串
System.out.println(Week1.SATURADAY.ordinal());//得到当前实例位于枚举实例的第几个(序号)
//枚举可用于switch
Week1 ww = Week1.MONDAY;
switch (ww) {
case MONDAY:
System.out.println("今天是星期一");
break;
case TUESDAY:
System.out.println("今天是星期二");
break;
case WEDNESDAY:
System.out.println("今天是星期三");
break;
case THURSDAY:
System.out.println("今天是星期四");
break;
case FRIDAY:
System.out.println("今天是星期五");
break;
case SATURADAY:
System.out.println("今天是星期六");
break;
case SUNDAY:
System.out.println("今天是星期日");
break;
default:
break;
}
}
}
1.3 意义
-
规范取值范围,只能自己定义自己有多少个对象
-
使用常量接口的话,就可以通过接口new出无数对象,达不到控制取值的效果
1.4 枚举的一些方法