一、枚举的定义
枚举(enum)是一种特殊的类,使用枚举可以很方便的定义常量
一个类中的对象,认为个数是有限固定的,可以将每一个对象一一列举出来
二、案例
设计一个类Week,这个类用来描述星期,有7个常量(星期一 ~~ 星期日)
1.当没有枚举类型的时候定义常量
代码如下(示例):
package enum01;
public class Week {
//描述星期 一共7天
//类似单例模式的想法
//构造方法私有
private Week(){
}
//所有对象都是属性 final修饰
public static final Week monday = new Week();
public static final Week tuesday = new Week();
public static final Week wednesday = new Week();
public static final Week thursday = new Week();
public static final Week friday = new Week();
public static final Week saturday = new Week();
public static final Week sunday = new Week();
}
public class Test {
public static void main(String[] args) {
//在Week类中访问了一个属性 一共7个
Week week = Week.monday;
}
2.使用枚举 定义常量
代码如下(示例):
package enum01;
//枚举类型,使用关键字enum
public enum Weekday {
//定义枚举常量,一般字母大写,逗号分隔开,末尾加分号;
MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
}
public class Test {
public static void main(String[] args) {
Weekday weekday = Weekday.valueOf("MONDAY");
System.out.println(weekday.name() + "------" + weekday.ordinal());
}
当使用枚举定义常量时,底层帮我们写好了这些下述代码,不用再手写;
private Week(){
}
public static final Week monday = new Week();
public static final Week tuesday = new Week();
public static final Week wednesday = new Week();
public static final Week thursday = new Week();
public static final Week friday = new Week();
public static final Week saturday = new Week();
public static final Week sunday = new Week();
3.常用方法
JDK1.5版本之后可以直接定义enum类型
我们自己定义的enum类型直接默认继承Enum(java.lang包)
我们自己定义的enum类型不能再写extends 但是可以实现Enum类型
Enum类型 有两个属性
name----->枚举对象的名字
ordinal—>枚举对象在类中罗列的顺序 类似index 从0开始 ordinal()获取序号
常用方法
方法名 | 解释 |
---|---|
valueOf() | 通过给定的name获取对应的枚举对象 |
values() | 获取全部的枚举对象–>返回一个数组 |
compareTo() | 可以比较两个枚举对象 |
toString() | 由于这个方法没有被final修饰 可以重写 |
… | … |
4.综合案例
案例1
public class Test {
public static void main(String[] args) {
//weekday--枚举类型的对象 默认继承Object
Weekday weekday = Weekday.valueOf("MONDAY");
//获取所有的枚举对象
Weekday[] weekday1=Weekday.values();
//遍历
for (Weekday week:weekday1) {
System.out.println(weekday.name()+"---"+weekday.ordinal());
}
/*综合案例 枚举在switch中的应用*/
//输入一个字符串 FRIDAY 输出对应的信息
Scanner input = new Scanner(System.in);
System.out.println("请输入一个星期的英文单词");
String key = input.nextLine();
//通过输入的英文单词找到对应的枚举对象
Weekday day = Weekday.valueOf(key);
switch (day){
case MONDAY:
System.out.println("您输入的是周一");
case TUESDAY:
System.out.println("您输入的是周二");
case WEDNESDAY:
System.out.println("您输入的是周三");
case THURSDAY:
System.out.println("您输入的是周四");
case FRIDAY:
System.out.println("您输入的是周五");
case SATURDAY:
System.out.println("您输入的是周六");
case SUNDAY:
System.out.println("您输入的是周日");
default:
System.out.println("输入有误,请重新输入");
}
}
}
输出:
MONDAY---0
TUESDAY---1
WEDNESDAY---2
THURSDAY---3
FRIDAY---4
SATURDAY---5
SUNDAY---6
请输入一个星期的英文单词
FRIDAY
您输入的是周五
案例2
我们也可以在enum中描述自己的一些属性或方法;
必须在enum类中第一行 描一下枚举的样子 最后需要分号结束
类创建的过程中帮我们创建枚举类型的对象
需要给枚举类型提供对应样子的构造方法 构造方法只能private修饰 可以重载
package enum01;
//枚举类型,使用关键字enum
public enum Weekday {
//定义枚举常量,一般字母大写,逗号分隔开,末尾加分号;
MONDAY("周一",1),TUESDAY("周二",2),WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
private String name;
private int index;
private Weekday(){}
private Weekday(String name,int index){
this.name=name;
this.index=index;
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
}
public class Test2 {
public static void main(String[] args) {
Weekday weekday = Weekday.MONDAY;
System.out.println(weekday.getName());
weekday.setName("加油");
System.out.println(weekday.getName());
}
}
输出
有什么不对的地方请留言,一起探讨,一块学习。小编大四还未毕业,也在学习的路上。