zoukankan      html  css  js  c++  java
  • 枚举类

      枚举类用于定义一组自定义常量。常量的类型为所定义的枚举类的类型。枚举类默认继承java.lang.Enum类,所以枚举类不能再继承其他类,不过枚举类可以实现接口。枚举类的定义包括2个部分:

    枚举类声明部分

      一般的枚举类声明格式为:[public ]enum 枚举类名[ implements 接口名]

      访问限制符:public属于访问限制符。没有被访问限制符修饰的枚举类只能在当前包内被调用。

        public:被public修饰的枚举类是一个公共类。可以被任意类或对象调用。每个Java源文件只能有一个public修饰的枚举类。

      implements:实现其他接口。每个枚举类可以实现多个接口。省略该部分则表示没有实现任何接口。

    枚举类类体部分

      枚举类的类体部分是常量的定义。常量定义时会自动调用枚举类的构造方法,所以每一个常量都相当于枚举类的一个实例。

      一般的常量定义格式为:常量名[(参数)]

      枚举类定义的多个常量之间用“,”隔开,最后一个常量之后加上“;”表示结束。

      如果枚举类没有定义构造方法,则会默认提供一个空的无参构造方法,此时可以直接使用常量名定义常量。例如:

    1 enum Month {
    2 
    3     January, February, March, April, May, June, July, August, September, October, November, December;
    4 
    5 }
    Month

      如果枚举类定义了成员变量,则需要提供一个带参构造方法为该成员变量赋值,此时需要在常量名后使用“( )”括起参数。例如:

     1 enum Week {
     2 
     3     Monday("周一"), Tuesday("周二"), Wednesday("周三"), Thursday("周四"), Friday("周五"), Saturday("周六"), Sunday("周日");
     4 
     5     private String zh_name;
     6 
     7     private Week(String name) {
     8         zh_name = name;
     9     }
    10 
    11     public String getName() {
    12         return zh_name;
    13     }
    14 
    15     @Override
    16     public String toString() {
    17         return super.toString() + "--" + zh_name;
    18     }
    19 
    20 }
    Week

      常量的定义需要放在前头,之后才能是成员变量、构造方法、方法等的定义。

      成员变量:枚举类成员变量的定义与类成员变量的定义相同。由于枚举类这一结构的初衷是设置常量,建议把枚举类成员变量都定义为私有变量,且只提供对应的getter方法,不提供对应的setter方法。

      构造方法:枚举类不支持通过程序来创建新实例,其构造方法的访问限制符只能为private,或者不加访问限制符。

      方法:枚举类方法的定义与类方法的定义相同。

    枚举类的使用

    获取枚举类型常量

      可以通过“枚举类名.常量名”的格式获取指定的常量。常量是枚举类的一个实例,所以常量的类型为枚举类类型。

      通过“枚举类名.values()”方法返回一个枚举类型数组,该数组包含了所有常量,顺序为常量定义的顺序。

    常用的枚举类方法

      常用的枚举类方法主要有:

      1.String name()

         返回常量名。

      2.int ordinal()

         返回常量的位标(从0开始)。

    测试

    1 @Test
    2 void testEnum() {
    3     Month month = Month.January;
    4     System.out.println(month);
    5     System.out.println(month.name());
    6     System.out.println(month.ordinal());
    7     System.out.println(Arrays.asList(Month.values()));
    8 }
    testEnum

      输出结果:

     

      总结:

      1.直接输出一个常量,默认情况下会输出常量名。

      2.常量的位标与定义时的位标有关。

  • 相关阅读:
    codeforces 1295 题解(完结)
    Leetcode 第 173 场周赛 题解(完结)
    P2564-[USACO12MAR]花盆Flowerpot
    Task 1-2
    LeetCode--169--多数元素(python)
    049字符异位词分组(python)
    矩阵路径(python)
    全排列
    滑动窗口最大值leetcode & nowcoder(python)
    取topK
  • 原文地址:https://www.cnblogs.com/lqkStudy/p/11013510.html
Copyright © 2011-2022 走看看