首页 > 编程语言 >JAVA中的枚举类

JAVA中的枚举类

时间:2024-08-11 13:58:44浏览次数:15  
标签:case DayOfWeek JAVA 枚举 类型 public 构造函数

Java中的枚举类型(Enum)

在Java中,枚举(Enum)是一种特殊的类,它用于表示一组固定的常量。枚举类型在Java 5(JDK 1.5)中被引入,提供了一种类型安全的替代方案,用于替代传统的整型常量(如`int`类型的常量)和字符串常量(`String`)来表示一组固定的值。

枚举类型具有以下特点:

  • 1. 类型安全:枚举类型通过编译器确保类型安全,防止了非法的值。
  • 2. 可读性:枚举提供了更好的代码可读性,因为它们直接描述了值的含义,而不是使用难以理解的整数值或字符串。
  • 3. 方便性:枚举类型可以包含方法、字段和构造函数,这使得它们非常灵活和强大。

枚举类型的基本用法

  • 1. 定义枚举:使用`enum`关键字定义枚举类型。
  • 2. 枚举常量:枚举类型中定义的每个常量都是该类型的一个实例。
  • 3. 方法和字段:枚举类型可以包含方法、字段和构造函数。构造函数必须是私有的,以防止外部代码创建枚举的实例。
  • 4. switch语句:枚举类型非常适合用在`switch`语句中,因为它们提供了清晰的、类型安全的选项。

枚举类型示例

下面是一个简单的枚举类型示例,用于表示星期中的几天。

// 定义名为DayOfWeek的枚举类型
public enum DayOfWeek {
    // 枚举常量
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY;

    // 枚举类型的方法示例:返回星期几的中文表示
    public String getChineseName() {
        switch (this) {
            case MONDAY:
                return "星期一";
            case TUESDAY:
                return "星期二";
            case WEDNESDAY:
                return "星期三";
            case THURSDAY:
                return "星期四";
            case FRIDAY:
                return "星期五";
            case SATURDAY:
                return "星期六";
            case SUNDAY:
                return "星期日";
            default:
                throw new IllegalStateException("Unexpected value: " + this);
        }
    }

    // 枚举类型的另一个方法示例:判断是否是工作日
    public boolean isWeekday() {
        return this != SATURDAY && this != SUNDAY;
    }

    // 枚举类型的构造函数(通常私有)
    // 注意:在Java中,枚举的构造函数默认是私有的,并且通常不需要显式声明。
    // 这里仅作为说明,实际使用中不应这样做(因为编译器不允许)
    // private DayOfWeek() {}

    // 枚举类型的实例化(自动完成,由JVM处理)
    // 枚举的实例(如MONDAY, TUESDAY等)在枚举类型被加载到JVM时自动创建。

    // 测试枚举类型
    public static void main(String[] args) {
        // 访问枚举常量
        DayOfWeek day = DayOfWeek.MONDAY;

        // 调用枚举类型的方法
        System.out.println(day.getChineseName());  // 输出:星期一
        System.out.println(day.isWeekday());       // 输出:true

        // 使用枚举类型在switch语句中
        switch (day) {
            case MONDAY:
            case TUESDAY:
            case WEDNESDAY:
            case THURSDAY:
            case FRIDAY:
                System.out.println("今天是工作日");
                break;
            case SATURDAY:
            case SUNDAY:
                System.out.println("今天是休息日");
                break;
            default:
                // 理论上,这里不会被执行,因为枚举类型包含了所有可能的值
                throw new IllegalStateException("Unexpected value: " + day);
        }
    }
}

枚举类型高级用法

1. 构造函数
虽然枚举的构造函数通常是隐式的,但你可以通过构造函数来初始化枚举实例的字段。然而,由于枚举的构造函数必须是私有的,因此你不能从外部调用它。

public enum Fruit {
    APPLE("red"),
    BANANA("yellow");

    private String color;

    // 枚举的私有构造函数,用来初始化颜色属性
    private Fruit(String color) {
        this.color = color;
    }

    // 获取水果颜色的方法
    public String getColor() {
        return color;
    }
}


 

2. 抽象方法和具体实现
枚举可以包含抽象方法,并且每个枚举常量都可以提供该抽象方法的具体实现。这允许枚举常量具有不同的行为。

public abstract class Shape {
    public abstract double area();
}

public enum SpecificShape implements Shape {
    CIRCLE("circle") {
        @Override
        public double area() {
            // ...计算圆形面积的逻辑...
        }
    },
    RECTANGLE("rectangle") {
        @Override
        public double area() {
            // ...计算矩形面积的逻辑...
        }
    };
   // 其他代码和字段...
}



3. 枚举集合
Java的`EnumSet`和`EnumMap`类提供了特别为枚举类型设计的集合。它们能够确保类型安全并提高性能。
   

EnumSet<DayOfWeek> weekdays = EnumSet.of(DayOfWeek.MONDAY, DayOfWeek.TUESDAY, DayOfWeek.WEDNESDAY);
System.out.println(weekdays); // 输出:[MONDAY, TUESDAY, WEDNESDAY]
  
EnumMap<DayOfWeek, String> dayOfWeekChineseName = new EnumMap<>(DayOfWeek.class);
dayOfWeekChineseName.put(DayOfWeek.MONDAY, "星期一"); // 添加映射关系
System.out.println(dayOfWeekChineseName); // 输出:{MONDAY=星期一}


   
总结   
枚举类型是Java中一个非常强大且实用的特性,它提供了定义一组受限值的能力,并支持丰富的操作和属性。

标签:case,DayOfWeek,JAVA,枚举,类型,public,构造函数
From: https://blog.csdn.net/qa3629723/article/details/141104687

相关文章

  • Java学习记录(二)
    方法方法分为有参方法和无参方法方法就是行为就是功能无参方法:有参方法:返回值返回值可以分为有返回值和无返回值void表示无返回值return表示返回返回值return不具有打印输出功能例如:重载重载就是方法名一致但是参数列表不一致,重载之后的方法名可以重名使用比如......
  • Java最新面试题2024,Java八股文2024
    一.基础篇1.Java语言特点1、简单易学、有丰富的类库2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高)3、与平台无关性(JVM是Java跨平台使用的根本)4、可靠安全5、支持多线程2.面向对象和面向过程的区别面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步......
  • 时尚美妆化妆品电商商城网站-计算机毕设Java|springboot实战项目
    ......
  • Java数组小白版
    一、数组概念一、数组定义数组就是指在计算机内存中开辟的连续存储空间,用于存放程序运行中需要用到的一组相同类型数据的容器。二.数组的声明+数组的长度定义数组时需要确定数组的长度(元素的个数),确定后不能更改;获取数组长度:数组名.length1.格式1(默认初始值)数据类型[]......
  • 499 道 Java 面试题 (附答案):JVM+ 分布式 + 算法 + 锁 +MQ
    Spring如何管理事务的。Spring怎么配置事务(具体说出一些关键的xml元素)。说说你对Spring的理解,非单例注入的原理?它的生命周期?循环注入的原理,aop的实现原理,说说aop中的几个术语,它们是怎么相互工作的。Springmvc中DispatcherServlet初始化过程。netty......
  • Java秋招校招面试
    本人学习两个月Java总结面试找到工作,整理了如下面试题目(只适合找一份非大厂工作!!)(多背多面)祝愿大家找到满意的工作该版本为简洁-以及-大家独立思考只给出题目,大家可以根据题目自行搜索,如不想搜索可以私信我给大家发带答案版本的,本人学习两个月Java总结面试找到工作,整理了如下面试......
  • Java自动化测试框架-05 - 来给你的测试报告化个妆整个形 - (上)(详细教程)
    1.简介前边通过宏哥的讲解和分享想必小伙伴们和童鞋们都已经见过testng框架生成的测试报告,是不是它的样子和长相实在是不敢让大家伙恭维。那么今天宏哥就当一回美容师,由宏哥来给它美美容;当一回外科医生,做一名整形医生。由宏哥来主刀,给它整整形。让她变得丰满、美丽、可爱......
  • JavaL1-07_综合练习
    练习一:需求:    机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。    按照如下规则计算机票的价格:旺季(5~10月)头等舱9折,经济舱8.5折,淡季(11月~来年4月)头等舱7折,经济舱6.5折。代码示例:packagecom.itheima.test;importj......
  • 【Java毕设选题推荐】基于SpringBoot的springbootOA公文发文管理系统
    前言:我是IT源码社,从事计算机开发行业数年,专注Java领域,专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务......
  • 【Java毕设选题推荐】基于SpringBoot的协同过滤算法美食推荐小程序
    前言:我是IT源码社,从事计算机开发行业数年,专注Java领域,专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务......