【JavaSE】Java基础语法(四十六):枚举

简介: 1. 概述枚举是一种特殊的数据类型,它列出了一组预定义的常量,并使用标识符来引用这些常量。枚举的用途很广泛,下面列举了几个常见的应用场景:管理常量:如果您需要在程序中使用一组固定不变的常量,建议使用枚举来管理这些常量。这样可以使得代码更加可读和易于维护。例如,你可以使用一个代表颜色的枚举,来管理程序中可能需要使用到的所有颜色。

1. 概述


枚举是一种特殊的数据类型,它列出了一组预定义的常量,并使用标识符来引用这些常量。枚举的用途很广泛,下面列举了几个常见的应用场景:


管理常量:如果您需要在程序中使用一组固定不变的常量,建议使用枚举来管理这些常量。这样可以使得代码更加可读和易于维护。例如,你可以使用一个代表颜色的枚举,来管理程序中可能需要使用到的所有颜色。

 替代布尔值:如果某个函数或方法的返回值只有两种状态,True 或者 False,可以使用枚举来管理只有两种状态的结果,使代码具有更好的可读性和易维护性。枚举可以将 True 和 False 映射到你实际希望表示的含义。


解析字符串:枚举常用于解析字符串并转换为相应的枚举值。对于从外部系统或文件读取的值,而我们必须将它们转换为特定的枚举值,将非常有用。


代替整数常量:在以前,程序员经常使用“幻数”(即硬编码的数字)。现在推荐使用枚举来代替整数常量或“幻数”,这样可以使代码更加可读和易于维护。

2. 定义格式

  • 格式
public enum s {
  枚举项1,枚举项2,枚举项3;
}
注意: 定义枚举类要用关键字enum

示例代码

// 定义一个枚举类,用来表示春,夏,秋,冬这四个固定值
public enum Season {
  SPRING,SUMMER,AUTUMN,WINTER;
}

3. 枚举的特点

特点

- 所有枚举类都是Enum的子类

- 我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项

- 每一个枚举项其实就是该枚举的一个对象

- 枚举也是一个类,也可以去定义成员变量

- 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略

- 枚举类可以有构造器,但必须是private的,它默认的也是private的。

枚举项的用法比较特殊:枚举(“”);

- 枚举类也可以有抽象方法,但是枚举项必须重写该方法示例代码

public enum Season {
  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);
    }
  };
  public String name;
  //空参构造
  //private Season(){}
  //有参构造
  private Season(String name){
    this.name = name;
  }
  //抽象方法
  public abstract void show();
}
public class EnumDemo {
  public static void main(String[] args) {
    /*
      1.所有枚举类都是Enum的子类
      2.我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
      3.每一个枚举项其实就是该枚举的一个对象
      4.枚举也是一个类,也可以去定义成员变量
      5.枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,
      但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
      6.枚举类可以有构造器,但必须是private的,它默认的也是private的。
      枚举项的用法比较特殊:枚举("");
      7.枚举类也可以有抽象方法,但是枚举项必须重写该方法
    */
    //第二个特点的演示
    //我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
    System.out.println(Season.SPRING);
    System.out.println(Season.SUMMER);
    System.out.println(Season.AUTUMN);
    System.out.println(Season.WINTER);
    //第三个特点的演示
    //每一个枚举项其实就是该枚举的一个对象
    Season spring = Season.SPRING;
  }
}

4. 枚举的方法

  • 方法介绍

cc6a5da696324a70a904c477003e0fa3.png

  • 示例代码
public enum Season {
  SPRING,SUMMER,AUTUMN,WINTER;
}
public class EnumDemo {
  public static void main(String[] args) {
    // String name() 获取枚举项的名称
    String name = Season.SPRING.name();
    System.out.println(name);
    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);
    System.out.println(index2);
    System.out.println(index3);
    System.out.println(index4);
    System.out.println("-----------------------------");
    // int compareTo(E o) 比较两个枚举项,返回的是索引值的差值
    int result = Season.SPRING.compareTo(Season.WINTER);
    System.out.println(result);//-3
    System.out.println("-----------------------------");
    // String toString() 返回枚举常量的名称
    String s = Season.SPRING.toString();
    System.out.println(s);
    System.out.println("-----------------------------");
    // static <T> T valueOf(Class<T> type,String name)
    // 获取指定枚举类中的指定名称的枚举值
    Season spring = Enum.valueOf(Season.class, "SPRING");
    System.out.println(spring);
    System.out.println(Season.SPRING == spring);
    System.out.println("-----------------------------");
    // values() 获得所有的枚举项
    Season[] values = Season.values();
    for (Season value : values) {
      System.out.println(value);
    }
  }
}

相关文章
|
1月前
|
Java Apache Maven
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
59 6
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
|
21天前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
本系列教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,建议查看“简洁”系列教程。本期重点介绍了Kotlin与Java的共存方式,包括属性、单例对象、默认参数方法、包方法、扩展方法以及内部类和成员的互操作性。通过这些内容,帮助你在项目中更好地结合使用这两种语言。
38 1
|
23天前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
30 2
|
17天前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
98 60
|
21天前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文档重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android library开发建议以及在Kotlin和Java之间互相调用的方法。
18 1
|
21天前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。若需快速入门,建议查阅“简洁”系列教程。本文重点探讨Kotlin与Java共存的高级话题,包括属性访问、空安全、泛型处理、同步机制及SAM转换等,助你在项目中逐步引入Kotlin。
18 1
|
23天前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
Kotlin语法笔记(28) -Kotlin 与 Java 混编
24 2
|
27天前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
41 3
|
23天前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
29 0
|
2月前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
80 5