Java枚举详解

一.枚举

  1.为什么有枚举?

如果我们的程序需要表示固定的几个值:

比如季节:spring (春),summer(夏),autumn(秋),winter(冬)

用常量表示:

        public static final int SEASON_SPRING = 1;
        public static final int SEASON_SUMMER = 2;
        public static final int SEASON_AUTUMN = 3;
        public static final int SEASON_WINTER = 4;

用常量表示季节的弊端

 1.代码不够简洁

 2.不同类型的数据是通过名字区分的

 3.不安全,由于是数字类型,就有可能使用这几个值做一些运算操作;比如:

SEASON_SPRING + SEASON_SUMMER

为了间接的表示一些固定的值,Java就给我们提供了枚举。

2.枚举的格式

概念:

       枚举:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。

格式:

      public  enum  s {

                       枚举项1,枚举项2,枚举项3;

       }

定义枚举类要用关键字enum

练习:

   定义一个枚举类,用来表示春,夏,秋,冬这四个固定值

package com.gch.d5_enum.demo1;

/**
   定义枚举类
 */
public enum Season {
    SPRING,SUMMER,AUTUMN,WINTER;
}

3.枚举的特点

   1.所有枚举类都是Enum的子类
   2.我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
   3.每一个枚举项其实就是该枚举的一个对象
   4.枚举也是一个类,也可以去定义成员变量
   5.枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,
      但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略

   6.枚举类可以有构造器,但必须是private的,它默认也是private的。
      枚举项的用法比较特殊:枚举("");
  
7.枚举类也可以有抽象方法,但是枚举项必须重写该方法。

   8.如果枚举项的后面什么都不写,那么此时它就默认调用枚举项的空参构造,如果想让它不        报错,只有让每一个枚举项去调用有参构造:枚举项(参数1,参数2){}

package com.gch.d5_enum.demo2;

/**
   定义枚举类
 */
public enum Season {
    // 5.枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,
    //   但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略

    // 如果枚举项的后面什么都不写,那么此时它就默认调用枚举项的空参构造
    // 如果想让它不报错,只有让每一个枚举项去调用有参构造:枚举项(参数1,参数2){}
    SPRING("春"){
        // 如果枚举类中有抽象方法
        // 那么在枚举项中必须要全部重写
        @Override
        public void show() {
            System.out.println(this.name);
        }
    },
    SUMMER("夏"){
        @Override
        public void show() {
            System.out.println(this.name);
        }
    },
    AUTUMN("秋"){
        @Override
        public void show() {
            System.out.println(this.name);

        }
    },
    WINTER("冬"){
        @Override
        public void show() {
            System.out.println(this.name);
        }
    };

//    4.枚举也是一个类,也可以去定义成员变量
    public String name;

    // 空参构造
//    private Season(){}

    // 有参构造
    private Season(String name){
        this.name = name;
    }

    // 抽象方法
    public abstract void show();
}
package com.gch.d5_enum.demo2;

public class EnumDemo {
    public static void main(String[] args) {
        // 第二个特点的演示
        // 2.我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
        System.out.println(Season.AUTUMN);
        System.out.println(Season.WINTER);

        // 第三个特点的演示
        //  3.每一个枚举项其实就是该枚举的一个对象
         Season spring = Season.SPRING;
    }
}

 4.枚举的方法

  1. String name() 获取枚举项的名称
  2. int ordinal() 返回枚举项在枚举类中的索引值, 枚举项在枚举类中它也是有索引的
  3. int compareTo(E o) 比较两个枚举项,返回的是索引值的差值
  4. String toString() 返回枚举常量的名称
  5. static <T> T valueOf(Class<T> type,String name)

                                          字节码文件对象  枚举项的名称
           ,它是一个静态方法,获取指定枚举类中的指定名称的枚举值

     6. values()  获得所有的枚举项

package com.gch.d5_enum.demo3;

/**
   定义枚举类
 */
public enum Season {
    SPRING,SUMMER,AUTUMN,WINTER;
}
package com.gch.d5_enum.demo3;

public class EnumDemo {
    public static void main(String[] args) {
        // String name() 获取枚举项的名称
         String name = Season.SPRING.name();
         System.out.println(name); // SPRING
        System.out.println("---------------------");

        // int ordinal() 返回枚举项在枚举类中的索引值
         int index1 = Season.SPRING.ordinal();
         int index2 = Season.SUMMER.ordinal();
         int index3 = Season.AUTUMN.ordinal();
        int index4 = Season.WINTER.ordinal();
        // 枚举项在枚举类中它也是有索引的
        System.out.println(index1); // 0
        System.out.println(index2); // 1
        System.out.println(index3); // 2
        System.out.println(index4); // 3
        System.out.println("----------------------");

        // int compareTo(E o) 比较两个枚举项,返回的是索引值的差值
        int result = Season.SPRING.compareTo(Season.WINTER);
        System.out.println(result); // 0 - 3 = -3
        System.out.println("-----------------------");

        // String toString() 返回枚举常量的名称
        String s = Season.SPRING.toString();
        System.out.println(s); // SPRING
        System.out.println("------------------");

        // static <T> T valueOf(Class<T> type,String name)
        //                      字节码文件对象  枚举项的名称
        // 它是一个静态方法,获取指定枚举类中的指定名称的枚举值
        Season spring = Enum.valueOf(Season.class, "SPRING");
        System.out.println(spring); // SPRING
        System.out.println(Season.SPRING == spring); // true
        System.out.println("--------------------------");

        // values()  获得所有的枚举项
        Season[] values = Season.values();
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java中的switch语句可以使用枚举类作为条件进行匹配。引用主要介绍了Java枚举类型在switch语句中的正确使用方法,通过示例代码详细展示了如何使用枚举类型进行条件匹配。这对于学习和工作都具有一定的参考价值。 在Java 8之后,switch语句还可以使用String类型作为条件进行匹配。为了提升代码的可靠性与重用性,可以将String类型转换成枚举类,然后再进行匹配。引用提到了这一点。 在使用switch语句时,需要注意的是,case后面使用的是枚举类型,不需要加上枚举类的类名,而switch语句的输入是枚举类的实例。这一点需要特别留意。引用中也提到了这个注意事项。 总结起来,Java中的switch语句可以使用枚举类作为条件进行匹配,这样可以提高代码的可读性和可维护性。另外,在使用switch语句时,需要注意case后面使用的是枚举类型,不需要加上枚举类的类名,而switch语句的输入是枚举类的实例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java枚举类型在switch语句正确使用方法详解](https://download.csdn.net/download/weixin_38599412/12723487)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java Switch中使用多字段的枚举类](https://blog.csdn.net/Saintmm/article/details/126750804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Surpass余sheng军

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值