枚举—enum
一个类中的对象,一般认为个数是有限且固定的,可以将每一个对象一一列举出来
1.如果没有枚举类,如何手动设计一个Day类描述一周7天
//类似单例模式
public class Day {//描述星期
//构造方法私有
private Day() {}
//所有对象都是属性
public static final Day monday = new Day();
public static final Day tuesday = new Day();
public static final Day wednesday = new Day();
public static final Day thursday = new Day();
public static final Day friday = new Day();
public static final Day saturday = new Day();
public static final Day sunday = new Day();
}
public class Test {
public static void main(String[] args) {
Day day = Day.monday;
}
}
采用枚举类
public enum MyDay {
//7个当前类对象
monday, tuesday, wednesday ,thursday , friday ,saturday, sunday
}
public class Test {
public static void main(String[] args) {
MyDay myDay = MyDay.monday;
}
}
我们自己定义的枚举类默认继承Object,除了继承Object类的方法以外,默认继承Enum类型,所以没有办法再继承(extends)别的类,但是可以实现
Enum类有两个属性
— name 枚举对象的名字,name()获取name属性
— ordinal 枚举对象在类中罗列的顺序,类似index 也从零开始,ordinal()获取序列
一些常用的方法:
valueOf() 通过给定的name,获取对应的枚举对象
values() 获取全部的枚举对象,返回一个数组,枚举类型的数组
compareTo() 可以比较两个枚举对象,比较对象的位置前后
toString() 没有用final修饰,可以重写
switch内部判断enum对象
public enum MyDay {
monday, tuesday, wednesday ,thursday , friday ,saturday, sunday
}
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个星期");
String key = input.nextLine();
MyDay day = MyDay.valueOf(key);
switch (day) {
case monday:
System.out.println("您输入的是星期一");
break;
}
}
}
我们也可以在enum中描述自己的属性或方法
必须在类中第一行 描述枚举的样子,最后需要分号结束;
可以定义自己的属性
类创建的过程中 帮我们创建枚举类型的对象
需要给枚举类型提供对应样子的构造方法,并且构造方法只能用private修饰(原因参照无枚举时的例子),
public enum MyDay {
monday("星期一",1), tuesday, wednesday ,thursday , friday ,saturday, sunday;
private String name;
private int index;
private MyDay() {}
private MyDay(String name, int index) {
this.name=name;
this.index=index;
}
public String getName() {
return this.name;
}
public int getIndex() {
return this.index;
}
}
public class Test {
public static void main(String[] args) {
MyDay day = MyDay.monday;
System.out.println(day.getName()+day.getIndex());
}
}
//星期一1
总的来说,枚举就是一个对象,但是这个对象有个数限制,所以以后遇到对象个数有限的情况下可以考虑枚举。