Java学习26--枚举类

news/2024/7/8 2:47:44

enum枚举

Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。

enum Color 
{ 
    RED, GREEN, BLUE; 

} 
values (), ordinal () 和 valueOf () 方法
    values () 返回枚举类中所有的值。
    ordinal ()方法可以找到每个枚举常量的索引,就像数组索引一样。
    valueOf ()方法返回指定字符串值的枚举常量。

enum枚举类,即一组固定的常量。枚举指的是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的集合。例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举,可以定义一个枚举类型叫做DayOfWeek。定义方法如下:

public enum DayOfWeek {  
    SUNDAY,  
    MONDAY, 
    TUESDAY,  
    WEDNESDAY,  
    THURSDAY,  
    FRIDAY,  
    SATURDAY
}  

一个简单的程序,一年四季(比较懒惰只写了两季),注意定义enum类时只允许输出,不允许输入所以没有设置set类(同时写了final关键字的variable也不能建立getter结构)。

package Enum;

public class test {
    enum yearseason {
        //必须要在枚举类开头声明多个对象,对象之间使用,隔开
        SPRING("Spring", "the start of the year"),
        SUMMER("Summer", "hot season of the year");

        //声明当前对象的实例变量,使用private final修饰
        private final String pname;
        private final String pdetail;

        //私有化构造器
        private yearseason(String sname, String sdetail) {

            this.pname = sname;
            this.pdetail = sdetail;
        }

        public String getPname() {
            return pname;
        }

        public String getPdetail() {
            return pdetail;
        }

        public String toString(){
            return "season name is "+pname+";season detail is "+pdetail;
        }

    }


    public static void main(String[] args) {
        //yearseason WINTER = new yearseason("WINTER","cold weather of the year");//enum里面没有设置set结构所以不能写入哦
        System.out.println(yearseason.SPRING.getPname()+":"+yearseason.SPRING.getPdetail());
        System.out.println(yearseason.SUMMER.toString());

    }
}

程序输出:

Spring:the start of the year
season name is Summer;season detail is hot season of the year

Process finished with exit code 0

values () 方法的使用:

依次输出每个枚举类型时候可以这样

 public static void main(String[] args) {
        //enum类的名称+[]+自定义的数组名称 = enum类的名称.values()
		//即可返回数组中的所有值
        DayOfWeek [] x_total=DayOfWeek.values();

        //for(每个元素:数组名){XXX}增强for循环,能快速输出一个数组的内容
		
	
        for(DayOfWeek h_each:x_total){
		 //for(DayOfWeek h_each:DayOfWeek.values())
	 //当然这样写也是一模一样的,它相当于上面两行合并了
            System.out.println("today is "+h_each);
        }
    }

返回值

today is SUNDAY
today is MONDAY
today is TUESDAY
today is WEDNESDAY
today is THURSDAY
today is FRIDAY
today is SATURDAY

ordinal ()方法的使用

(返回所寻元素数组下标,返回值int)

enum DayOfWeek{
    SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY
}
public class my_enum{
        public static void main(String[] args) {
            // 获取WEDNESDAY枚举常量的位置,这里应是【3】下标位置
            int ord = DayOfWeek.WEDNESDAY.ordinal();
            System.out.println("WEDNESDAY的位置(ordinal): " + ord);
            // 输出: WEDNESDAY的位置(ordinal): 3
        }
}


WEDNESDAY的位置(ordinal): 3

valueOf ()方法的使用

valueOf() 方法也是 Enum 类的一个静态方法,它用于将给定的字符串名称转换为对应的枚举常量。
如果字符串名称与枚举类型中某个常量的名称匹配,则 valueOf() 方法返回该常量;否则,它将抛出一个错误 IllegalArgumentException。

 enum DayOfWeek{
    SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY
}
public class my_enum{
    public static void main(String[] args) {

        System.out.println(DayOfWeek.valueOf("TUESDAY"));
        System.out.println("=========>");
        System.out.println(DayOfWeek.valueOf("666"));
    }
}
 

结果

TUESDAY
=========>
Exception in thread "main" java.lang.IllegalArgumentException: No enum constant exception.demo02.DayOfWeek.666
	at java.base/java.lang.Enum.valueOf(Enum.java:274)
	at exception.demo02.DayOfWeek.valueOf(my_enum.java:73)
	at exception.demo02.my_enum.main(my_enum.java:81)

Process finished with exit code 1


http://lihuaxi.xjx100.cn/news/2046356.html

相关文章

报错:org.springframework.jdbc.BadSqlGrammarException:

//报错 2024-02-24 19:44:10.814 ERROR 6184 --- [nio-9090-exec-5] c.e.exception.GlobalExceptionHandler : 异常信息: org.springframework.jdbc.BadSqlGrammarException: GPT: 根据异常信息,这是一个Spring框架抛出的BadSqlGrammar…

OpenFeign整合Sentinel

OpenFeign 整合 Sentinel 实现服务降级 引入依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- nacos服务发现 --><depen…

277.【华为OD机试真题】图像物体的边界(深度优先搜索 (DFS)—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…

订单到期关闭如何实现(延迟场景处理)

文章目录 概述种处理方案任务调度实现(定时任务)基于redis 如何实现1redis过期key实现&#xff08;键通知机制&#xff09;基于redis延迟队列Redisson实现一个延迟队列 基于MQ的延迟队列实现 概述 订单30分钟未支付自动取消怎么实现 日常开发中&#xff0c;我们经常遇到这种业…

VSCode使用Remote-SSH连接服务器时报错:启动服务器失败问题

VSCode使用Remote-SSH连接服务器时报错&#xff1a;启动服务器失败问题 问题描述解决方法引用 问题描述 第一天上班&#xff0c;回来发现又不能使用VScode连不上服务器了&#xff0c;在「输出」栏出现了一直报 Waiting for server log… 的情况&#xff01;本来以为是普通的连接…

线段树学习笔记 下

可持久化线段树 上面两篇是几年前写的&#xff0c;笔者今日才加以整理&#xff0c;如有错误请见谅。 线段树加上版本就是可持久化线段树。 Problem Intro 给定一个数组&#xff0c;只需要单点修改和单点查询&#xff0c;但要维护版本。 具体说&#xff0c;每一次操作可能从…

LabVIEW串口通信的激光器模块智能控制

LabVIEW串口通信的激光器模块智能控制 介绍了通过于LabVIEW的VISA串口通信技术在激光器模块控制中的应用。通过研究VISA串口通信的方法和流程&#xff0c;实现了对激光器模块的有效控制&#xff0c;解决了数据发送格式的匹配问题&#xff0c;为激光器模块的智能控制提供了一种…

Android和JS互相调用

JS调用Android&#xff1a; App.runMethod(, ); Android端配置JS调用的方法 webView.addJavascriptInterface(bleJavaScriptInterface, "App");public class BLEJavaScriptInterface {private MainActivity activity;private Handler handler;public void setActi…