Java枚举类型enum的详解及使用

Java枚举类型enum的详解及使用

什么是枚举类型enum

Java中的枚举类型enum定义一个类,列出该类的所有实例,这些实例的值是有限的、预定义的。

是一组有名字的值的集合,它们常被用作程序中的常量或者可选择的值。

Java的枚举(enum)是一种比传统的常量更为灵活、可扩展的类型。

枚举类型enum的使用

枚举的定义

enum可以在类或者包的内部定义。

定义枚举时,第一行列出枚举的所有元素。每个枚举都是以逗号分隔的名称列表结束。在此之后,您可以将任何普通字段或方法添加到枚举中。

下面的例子定义了车型enum

public enum CarModel {
   SEDAN, COUPE, WAGON, SPORTS, SUV
}

枚举的使用

当定义枚举类型时,编译器会自动为我们创建一个含有我们预定义了的常量的类,并为它们赋上值。我们可以通过枚举类型的名称来访问这些常量。

CarModel sports = CarModel.SPORTS;

枚举的遍历

Java支持对枚举类型进行遍历。从Java 5开始,我们可以使用枚举的静态方法values()返回一个包含所有枚举值的数组,然后使用for-each循环来遍历这个数组。

for (CarModel cm : CarModel.values()) {
   System.out.println(cm);
}

枚举的方法

在枚举中,你也可以定义方法。

public enum CarModel {
   SEDAN(4), COUPE(2), WAGON(4), SPORTS(2), SUV(4);

   private final int numWheels; 

   private CarModel(int numWheels) {
       this.numWheels = numWheels;
   }

   public int getNumWheels() { 
       return numWheels; 
   }
}

上面的例子中,我们为每个枚举定义了一个numWheels,并且定义了一个返回numWheels的方法。

示例

下面通过两个示例,进一步说明枚举类型的使用。

示例一:计算器

public class Calculator {
    enum Operator {
        ADD, SUBTRACT, MULTIPLY, DIVIDE
    }

    static int calculate(int a, int b, Operator op) {
        switch (op) {
            case ADD:
                return a + b;
            case SUBTRACT:
                return a - b;
            case MULTIPLY:
                return a * b;
            case DIVIDE:
                return a / b;
            default:
                throw new AssertionError("Unknown operator: " + op);
        }
    }

    public static void main(String[] args) {
        int a = 10, b = 5;

        System.out.println(a + " + " + b + " = " + calculate(a, b, Operator.ADD));
        System.out.println(a + " - " + b + " = " + calculate(a, b, Operator.SUBTRACT));
        System.out.println(a + " * " + b + " = " + calculate(a, b, Operator.MULTIPLY));
        System.out.println(a + " / " + b + " = " + calculate(a, b, Operator.DIVIDE));
    }
}

在这个示例中,我们使用枚举类型Operator。我们定义了四种运算符:ADDSUBTRACTMULTIPLYDIVIDE。在calculate()方法中,我们使用了switch语句,根据操作符来计算两个数字。

示例二:季节

public class Season {
    enum SeasonName {
        SPRING, SUMMER, FALL, WINTER
    }

    static String getSeasonDescription(SeasonName seasonName) {
        switch (seasonName) {
            case SPRING:
                return "The weather is getting warmer.";
            case SUMMER:
                return "The weather is hot.";
            case FALL:
                return "The leaves are changing color.";
            case WINTER:
                return "The weather is cold and it may snow.";
            default:
                throw new AssertionError("Unknown season name: " + seasonName);
        }
    }

    public static void main(String[] args) {
        SeasonName[] seasons = SeasonName.values();

        for (SeasonName season : seasons) {
            System.out.println(season + ": " + getSeasonDescription(season));
        }
    }
}

在这个示例中,我们使用枚举类型SeasonName。我们定义了四个季节:SPRINGSUMMERFALLWINTER。在getSeasonDescription()方法中,我们根据季节来返回一个字符串,简要描述该季节所代表的天气特点。

main()方法中,我们使用for循环来遍历所有季节,并且输出它们的名称和描述。

结论

枚举类型enum是一种非常方便、易于使用、可扩展的类型。在Java 5之后,它成为了Java程序员的标配。在开发程序时,尽量使用枚举类型,可以极大地提高程序的可读性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java枚举类型enum的详解及使用 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 浅析Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt)

    浅析Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt) MD5加密 MD5算法是一种散列函数,可以将任意长度的数据转化成一定长的散列值。通常用于密码加密。使用Java自带包java.security.MessageDigest中的getInstance(“MD5”)方法获取MD5的实例,加密方式如下: import java.se…

    Java 2023年6月3日
    00
  • win10系统下安装Java SE Development Kit(JDK)与环境变量安装配置的图文过程

    下面是详细的攻略: 安装JDK 打开JDK 官网,下载适合你电脑的 JDK 版本(通常会选择 Windows x64 版本)。 打开下载的 JDK 安装程序,按照提示一步步安装。安装过程中需要注意安装路径,可以自行选择或默认安装路径。 安装完成之后,打开 CMD 命令行工具,输入 java -version,出现以下类似字样即为安装成功: java vers…

    Java 2023年5月26日
    00
  • java随机生成字符串(字符随机生成类 生成随机字符组合)

    生成随机的字符串在Java开发中是比较常见的需求,可以用于验证码生成、密码加密等场景。下面是一个完整的攻略,可以让您方便地实现这一功能。 1. 使用Java内置库实现随机字符串 Java提供了一个类 java.util.UUID,使用该类可以方便地生成随机的字符串。UUID是根据时间戳、硬件地址等信息生成的一串字符串,具有很高的唯一性。 示例代码如下: im…

    Java 2023年5月26日
    00
  • Java高效读取大文件实例分析

    Java高效读取大文件实例分析 在处理大文件时,Java可读取整个文件或一部分,但这有时效率较低。在本文中,我们将讨论如何使用Java高效地读取大文件。 1. 读取整个大文件 对于小文件,可以使用Files.readAllBytes(path)或Files.readAllLines(path)一次性读取整个文件。但是,对于大文件,这种方式可能会导致内存不足。…

    Java 2023年5月20日
    00
  • Java Lambda表达式详解

    Java Lambda表达式详解 什么是Lambda表达式? Lambda表达式是JDK8引入的一种新的语言特性,主要用于简化Java中的匿名内部类的使用。Lambda表达式本质上是一种匿名函数,实现了函数式编程的思想。 Lambda表达式的语法 Lambda表达式的基本语法如下: (parameters) -> expression 或 (param…

    Java 2023年5月20日
    00
  • springboot使用ThreadPoolTaskExecutor多线程批量插入百万级数据的实现方法

    下面我来详细讲解一下“springboot使用ThreadPoolTaskExecutor多线程批量插入百万级数据的实现方法”的攻略。 1. 什么是ThreadPoolTaskExecutor ThreadPoolTaskExecutor是Spring内置的线程池实现类,它可以通过简单的配置就能够创建一个线程池,并且可以对线程池进行调度和管理。 2. 使用T…

    Java 2023年5月19日
    00
  • JavaSpringBoot报错“DataIntegrityViolationException”的原因和处理方法

    原因 “DataIntegrityViolationException” 错误通常是以下原因引起的: 数据库约束问题:如果您的数据库约束存在问题,则可能会出现此错误。在这种情况下,您需要检查您的数据库约束并确保它们正确。 数据库操作问题:如果您的数据库操作存在问题,则可能会出现此错误。在这种情况下,您需要检查您的数据库操作并确保它们正确。 数据库连接问题:如…

    Java 2023年5月4日
    00
  • Struts2实现生成动态验证码并验证实例代码

    实现生成动态验证码并验证,我们可以通过Struts2框架结合java的验证码生成工具包Jcaptcha实现。下面是具体的步骤和示例代码: 步骤1:添加Jcaptcha依赖 我们首先需要添加Jcaptcha的依赖,可以在pom.xml中加入以下代码: <dependency> <groupId>com.github.stephenc.j…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部