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程序员的标配。在开发程序时,尽量使用枚举类型,可以极大地提高程序的可读性和可维护性。

阅读剩余 68%

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

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

相关文章

  • java实现随机数生成器

    生成随机数是我们在Java程序中经常遇到的问题,Java提供了一些内置的方法来生成伪随机数,我们也可以使用外部库来实现更高级别的随机化过程。本文将为大家介绍Java实现随机数生成器的完整攻略。 生成伪随机数 Java为我们提供了一些内置的类,比如Random和Math,来生成伪随机数。 使用Random类 Random类是Java中最基本的生成随机数的类之一…

    Java 2023年5月23日
    00
  • js中return false(阻止)的用法

    JavaScript中的return false可以用来阻止某些事件的发生或者是提交某些表单的行为。它是常用的一种代码技巧,下面将详细讲解其用法。 一、阻止事件发生 在JavaScript中,我们经常需要对某些事件进行监听,并在事件触发时执行相应的操作。例如,在点击一个按钮时,我们可能需要执行一些操作并且阻止浏览器跳转到该按钮所指的链接。我们可以使用retu…

    Java 2023年6月15日
    00
  • Java垃圾回收之标记清除算法详解

    Java垃圾回收之标记清除算法详解 什么是垃圾回收算法 垃圾回收算法是一种自动管理内存的机制,用于自动回收不再使用的内存空间。 Java 中垃圾回收算法主要有标记清除算法、复制算法、标记整理算法和分代收集算法。 标记清除算法 标记清除算法是最简单的一种垃圾回收算法,它分为两个步骤:标记和清除。 标记 标记可以理解为“识别”不再使用的对象,通常从“根对象”开始…

    Java 2023年5月19日
    00
  • 深入理解Struts2国际化信息机制

    深入理解Struts2国际化信息机制 国际化机制简介 在应用程序中,我们常常需要支持多种语言环境,这涉及到信息的国际化和本地化问题。Struts2框架提供了一套国际化机制,使得开发者只需要维护一份资源文件即可支持多语言。Struts2的国际化机制主要由三部分组成:资源文件、区域设置和国际化拦截器。 资源文件 资源文件是一种特殊的属性文件,其中包含了国际化的信…

    Java 2023年5月20日
    00
  • 浅谈request.getinputstream只能读取一次的问题

    当使用request.getInputStream()方法获取请求数据流时,数据流只能被读取一次,如果多次读取,将无法获取数据。这是一个常见的问题,对于此问题的解决,我们可以使用如下两种方法: 方法一:使用Filter过滤器 通过过滤器来代替直接获取输入流,将获取到的输入流存放在自定义的HttpServletRequestWrapper中并使用缓存将数据流缓…

    Java 2023年6月15日
    00
  • 解决@RequestBody搭配@Data的大坑

    针对@RequestBody搭配@Data可能会遇到的大坑,我可以提供以下攻略: 问题描述 使用Spring Boot开发Web应用时,我们经常会使用注解@RequestBody来接收前端传过来的Json格式请求数据,而为了简化我们的代码,我们可以使用Lombok注解@Data来自动生成getter、setter、toString、equals和hashCo…

    Java 2023年5月26日
    00
  • 常见JavaWeb安全问题和解决方案

    常见JavaWeb安全问题和解决方案 引言 JavaWeb应用的普及使其突显出越来越多的安全威胁。在开发JavaWeb应用时,我们需要考虑如何确保安全才能更好地保护用户个人信息和应用程序数据。本攻略为您提供了一些常见的JavaWeb安全问题和解决方案,希望对您有所帮助。 常见JavaWeb安全问题 SQL注入 SQL注入是一种常见的安全威胁,攻击者可以利用这…

    Java 2023年5月27日
    00
  • tomcat 集群监控与弹性伸缩详解

    Tomcat 集群监控与弹性伸缩详解 1. Tomcat 集群概述 在 Tomcat 集群中,Tomcat 服务器可以分为主/从节点,主节点负责接收用户请求并将请求转发到从节点上,从节点负责处理具体的业务逻辑。Tomcat 集群可以提高系统的性能和可用性,并且还支持弹性伸缩功能。 2. Tomcat 集群监控 为了保证 Tomcat 集群的正常运行以及及时发…

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