Java 枚举类 Enum

一、枚举的定义

枚举(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());
    }
}

输出
在这里插入图片描述

有什么不对的地方请留言,一起探讨,一块学习。小编大四还未毕业,也在学习的路上。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值