Java 枚举 Enumeration

    

枚举:

  1. 自定义枚举类
  2. 使用enum关键字

 

  1. 不需要提供setXxx方法, 枚举对象通常只读
  2. 对枚举对象使用static final, 实现底层优化
  3. 枚举对象可有多个属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.gibe;
 
public class Enumeration {
  public static void main(String[] args) {
    System.out.println(Season.AUTUMN);
    System.out.println(Season.WINTER);
  }
}
 
class Season {
  private String name;
  private String desc;
  // 定义四个固定类属性
  public static final Season SPRING = new Season("spring", "warm");
  public static final Season SUMMER = new Season("summber", "hot");
  public static final Season AUTUMN = new Season("autumn", "cool");
  public static final Season WINTER = new Season("winter", "cold");
 
  // 构造器私有, 防止new
  // 去掉setXxx, 防止属性被修改
  // 在类内部, 直接创建固定对象
  // 加入final
  private Season(String name, String desc) {
    this.name = name;
    this.desc = desc;
  }
 
  public String getName() {
    return name;
  }
 
  public String getDesc() {
    return desc;
  }
 
  @Override
  public String toString() {
    return "Season{" +
        "name='" + name + "'" +
        ", desc='" + desc + '\'' +
        "}";
  }
}

  

steps:

  1. 构造器私有化
  2. 本类内部创建对象
  3. 对外暴露对象 (public static final)
  4. 提供get方法, 不提供set方法

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.gibe;
 
public class Enumeration {
  public static void main(String[] args) {
    System.out.println(Season.AUTUMN);
    System.out.println(Season.WINTER);
  }
}
 
enum Season {
  SPRING("spring", "warm"), WINTER("winter", "cold"),
  AUTUMN("autumn", "cool"), SUMMER("summer", "hot");
 
  private String name;
  private String desc;
 
  private Season() {
  }
 
  private Season(String name, String desc) {
    this.name = name;
    this.desc = desc;
  }
 
  @Override
  public String toString() {
    return "Season{" +
        "name='" + name + '\'' +
        ", desc='" + desc + '\'' +
        '}';
  }
 
  public String getName() {
    return name;
  }
 
  public String getDesc() {
    return desc;
  }
}

  

  1. 使用enum关键字开发枚举类时,默认继承Enum类,而且时一个final类, javap 反编译
  2. 传统的 public static final Season2 SPRING = new Season2("春天", "温暖"); 简化成 SPRING("春天", "温暖"), 这里必 须知道,它调用的是哪个构造器
  3. 使用无参构造器 创建 枚举对象, 实参列表 () 都可省

 

1
2
3
enum Gender{
    BOY,GIRL;  // 调用了Gender类的无参构造器
}

  

 enum枚举类方法

  1. name() 返回枚举类名称
  2. ordinal() 从 0 编号
  3. values() 反编译才能看到,返回 数组 含有定义所有枚举对象

     

     

  4. valueOf() 从String转为 enum对象
  5. compareTo 比较enum对象ordinal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com;
 
public class Enumeration {
  public static void main(String[] args) {
    Season autumn = Season.AUTUMN;
    System.out.println(autumn.name());  // AUTUMN
    System.out.println(autumn.ordinal());  // 2
    Season[] values = Season.values();
    for (Season value : values) System.out.println(value);
    Season autumn_ = Season.valueOf("AUTUMN");
    System.out.println(autumn==autumn_);  // true
    System.out.println(Season.AUTUMN.compareTo(Season.SPRING));  // 2
  }
}
 
enum Season {
  SPRING("spring", "warm"), SUMMER("summer", "hot"), AUTUMN("autumn", "cool"), WINTER("winter", "cold");
  private String name;
  private String desc;
 
  private Season() {
  }
 
  Season(String name, String desc) {
    this.name = name;
    this.desc = desc;
  }
 
  public String getName() {
    return name;
  }
 
  public String getDesc() {
    return desc;
  }
}

  

Notice:

  1. 使用enum关键字后, 不能在继承其他类, enum会隐式继承Enum, Java单继承机制

     

     

  2. enum实现的枚举类, 可以实现接口
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package com;
     
    public class Enumeration {
      public static void main(String[] args) {
        Music.music.play();
      }
    }
     
    interface Play{
      public abstract void play();
    }
     
    enum Music implements Play{
      music;
      @Override
      public void play(){
        System.out.println("playing ...");
      }
    }

      

 

posted @   ascertain  阅读(301)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2020-07-08 operation
2020-07-08 namp & ncat
2020-07-08 rsync
2020-07-08 gcc编译选项
2020-07-08 Instrument: vim
2020-07-08 ntp服务配置
2020-07-08 C语言实现矩阵相乘
点击右上角即可分享
微信分享提示