java枚举类的作用及其使用

枚举类的引入

如何自定义枚举类 

枚举类的作用

如何使用关键字enum定义枚举类 

Enum类的主要方法 

实现接口的枚举类

  1. 枚举类的对象只能是有限个的,确定的。
  2. 举例如下:  星期:Monday(星期一)、......、Sunday(星期天)
  3. 性别:Man(男)、Woman(女) 
  4. 季节:Spring(春节)......Winter(冬天)
  5.  支付方式:Cash(现金)、WeChatPay(微信)、Alipay(支付宝)、BankCard(银 行卡)、CreditCard(信用卡) 
  6. 就职状态:Busy、Free、Vocation、Dimission
  7.  订单状态:Nonpayment(未付款)、Paid(已付款)、Delivered(已发货)、 Return(退货)、Checked(已确认)Fulfilled(已配货)、  线程状态:创建、就绪、运行、阻塞、死亡 。

枚举类的属性 :枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰 Ø枚举类的使用 private final 修饰的属性应该在构造器中为其赋值 ,若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的 传入参数

那么枚举类的具体作用是:

枚举(enmu),是指一个经过排序的,被打包成一个单一实体的项列表,一个枚举的实例可以使用枚举列表中的任意的单一的值,如下边的例子。这也是从jdk5之后引入的,在枚举之前如果想表示一组离散的特定的值,往往使用一些常量。例如:对于一年四季的表示针对下边所述的Season类,如果要进行各个对象的获取数据,从下边程序进行解读,一般采用Season spring = Season.SPRING;//通过类名去获取静态常量的值 String seasonDesc = spring.getSeasonDesc();//获得其属性这样一来客户端必须对这些常量去进一步的理解,才能了解如何去使用这个东西,就是说程序员使用的时候不去程序中看一下 都不知道这个参数如何去使用,如何调用。因为每个人都能够建立起自己的一种常量名代替参数值,那么问题来了,程序的可读性就更差了

私有化类的构造器,保证不能在类的外部创建其对象

2. 在类的内部创建枚举类的实例。声明为:public static final

3. 对象如果有实例变量,应该声明为private final,并在构造器中初始化。

public class seasonTest {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        String seasonDesc = spring.getSeasonDesc();
        System.out.println(spring);
    }

}
//定义一个枚举类
class Season{
    //有限个确定的
    //声明season对象的属性
    private final String seasonName;//不能调用 不可变的
    private final String seasonDesc;
    //权限私有化 确定个数不能去多造
    private Season( String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;

    }
    //提供当前枚举类的多个对象public static final
    public static final Season SPRING=new Season("春天","春暖花开");
    public static final Season SUMMER=new Season("夏天","夏日暖暖");
    public static final Season AUTUMN=new Season("秋天","秋高气爽");
    public static final Season WINTER=new Season("冬天","冰天雪地");
//其他诉求 获取枚举类的属性 可以提供get方法


    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}
枚举类和普通 Java 类一样,枚举类可以实现一个或多个接口 若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只 要统一实现该方法即可。 若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法Enum类的主要方法:  
values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的 枚举值。  
valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符 串必须是枚举类对象的“名字”。如不是,会有运行时异常: illegalArgumentException。  
toString():返回当前枚举类对象常量的名称

那么我们使用枚举类后我们使用values()方法去遍历数组输出,这样我们就不用每一次的去调用静态方法名参数来完成就相对比较好了。一下代码完成了 values()方法完成的遍历,tostring的方法我们这个程序中没有重写tosring方法,valueof(String str)方法都实现了,以及实现一个或多个接口。

用下面一个小程序来演示一下:

/**

 * 三个方法

 * 1.values方法

 * 2.valuesof(string) 找指定名的对象的名字 根据提供的objname 返回枚举类对象的对象名

 */

public class SeasonTest1 {

    //定义的枚举类 默认的string中的class java.lang.Enum tostring

    public static void main(String[] args) {

        Season1 spring=Season1.SPRING;

        String seasonDesc = spring.getSeasonDesc();

        System.out.println(spring.toString());

        System.out.println("**************************");

       // System.out.println(seasonDesc);//父类不是object

        //System.out.println(Season1.class.getSuperclass());

        Season1[] values = Season1.values();//枚举类的对象名出来 没有属性直接对象一摆 逗号隔开



        for (int i = 0; i < values.length; i++) {

            System.out.println(values[i]);

            values[i].show();

        }

        System.out.println("****************************");

        Thread.State[] values1 = Thread.State.values();

        for (int i = 0; i < values1.length; i++) {

            System.out.println(values1[i]);



        }

        //valueof()方法中的字符串必须于枚举保持一致,然后就可以调用这个枚举中的方法。

        Season1 spring1 = Season1.valueOf("SPRING");

        System.out.println(spring1);

        spring1.show();/*
SPRING
这是春节输出结果
*/



    }



}

//定义一个接口

interface  info{

    void show();

}

//使用ennum关键字实现

enum Season1 implements info{

    SPRING("春天","春暖花开"){

        @Override//直接重写到枚举的对象中方便调用

        public void show() {

            System.out.println("这是春节");

        }

    },

    SUMMER("夏天","夏日暖暖"){

        @Override

        public void show() {

            System.out.println("宁静的夏天");

        }

    },

    AUTUMN("秋天","秋高气爽"){

        @Override

        public void show() {

            System.out.println("秋天在哪里");

        }

    },

    WINTER("冬天","冰天雪地"){

        @Override

        public void show() {

            System.out.println("大约在冬季");

        }

    };

    private final String seasonName;//不能调用 不可变的

    private final String seasonDesc;

    //权限私有化 确定个数不能去多造

    private Season1( String seasonName,String seasonDesc){

        this.seasonName=seasonName;

        this.seasonDesc=seasonDesc;



    }



    public String getSeasonName() {

        return seasonName;

    }



    public String getSeasonDesc() {

        return seasonDesc;

    }



   /* @Override//实现接口的方法

    public void show() {

        System.out.println("这是一个季节!");



    }*/

}
//运行结果图:

枚举中的主要方法:

 

 

当我们需要在代码中表示一组固定的值时,可以使用Java中的枚举类枚举类是一种特殊的类,用于定义一组有限的常量。它提供了更好的可读性和类型安全性。 以下是创建和使用枚举类的步骤: 1. 定义枚举类使用关键字`enum`来定义一个枚举类,后面跟着枚举类的名称。 ```java enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } ``` 2. 声明枚举实例:在枚举类中定义的常量被称为枚举实例。它们通常以大写字母表示,并以逗号分隔。 3. 使用枚举实例:可以像使用其他类型的变量一样使用枚举实例。例如,通过将枚举实例赋值给变量,或者作为方法的参数或返回值。 ```java Day today = Day.MONDAY; System.out.println("Today is " + today); ``` 4. 枚举方法:枚举类可以包含方法和构造函数。可以为枚举实例添加自定义方法,并在枚举类中定义其他行为。 ```java enum Day { MONDAY("Monday", 1), TUESDAY("Tuesday", 2), // ... private String name; private int value; private Day(String name, int value) { this.name = name; this.value = value; } public String getName() { return name; } public int getValue() { return value; } } ``` 在上面的示例中,我们为每个枚举实例添加了名称和值,并定义了构造函数和方法来获取它们的值。 枚举类的优点包括: - 类型安全性:只能使用枚举实例中定义的值,不允许使用任意其他值。 - 可读性:枚举实例以清晰的方式表示,使代码更易于理解和维护。 - 扩展性:可以为枚举实例添加新的属性和行为。 希望这个详细解释能帮助你理解Java中的枚举类及其使用方法。如果你还有其他问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值