Java enum 枚举类

Java Enum 枚举类

概述

  • 枚举类型本质上也是一种类,只不过是这个类的对象是有限的、固定的几个,不能让用户随意创建。

如果针对于某个类,其实例是确定个数,则推荐将此类声明为枚举类。

如果枚举类的实例只有一个,则可以看作时单例的实现方式。

枚举类的实现

JDK5.0之前
class Season{//2.声明当前类的对象的实例对象 使用Final修饰private final String seasonName;  //季节的名称private final String seasonDesc;  //季节的描述//1.0 私有化列表构造器private Season(String seasonName, String seasonDesc) {this.seasonName = seasonName;this.seasonDesc = seasonDesc;}//3.提供实力变量的get方法public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}//4.创建当前类的实例 public static final Season SPRING = new Season("春天","春暖花开");public static final Season SUMMER = new Season("夏天","夏日炎炎");public static final Season AUTUMN = new Season("秋天","秋高气爽");public static final Season WINTER = new Season("冬天","白雪皑皑");//还可以重写toString方法}
JDK5.0之中
num Season1{//必须在枚举类开头 声明对象 中间使用,隔开(枚举类中需要声明了私有化构造器)SPRING("春天","春暖花开"),SUMMER("夏天","夏日炎炎"),AUTUMN("秋天","秋高气爽"),WINTER("冬天","白雪皑皑");private final String seasonName;    //季节名称(使用final修饰,当作常量,不允许更改)private final String seasonDesc;    //季节描述//提供私有化构造器private Season1(String seasonName,String seasonDesc){this.seasonName = seasonName;this.seasonDesc = seasonDesc;}

细节

  • 使用enum关键字定义的枚举类,默认其父类时java.lang.Enum类
  • 使用enum关键字定义的枚举类,不要再显示的定义其父类,否则报错

enum类中的方法

已经定义了enum类

enum Season {SPRING("春季","春风又绿江南岸"),SUMMER("夏季","映日荷花别样红"),AUTUMN("秋季","秋水共长天一色"),WINTER("冬季","千里冰封,万里雪飘");private final String seasonName;    //季节名称private final String seasonDesc;    //季节描述private Season(String seasonName, String seasonDesc){this.seasonName = seasonName;this.seasonDesc = seasonDesc;}public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}
}
  • toString() 默认返回的是常量名(对象名),可以继续手动重写该方法!

    public class SeasonTest{public static void main(String []args){System.out.println(Season.SPRING.toString());	//输出:SPRINGSystem.out.println(Season.SUMMER.toString());	//输出:SUMMERSystem.out.println(Season.AUTUMN.toString());	//输出:AUTUMNSystem.out.println(Season.WINTER.toString());	//输出:WINTERSystem.out.println(Season.SPRING); 				//输出:SPRINGSystem.out.println(Season.SUMMER);				//输出:SUMMERSystem.out.println(Season.AUTUMN);				//输出: AUTUMNSystem.out.println(Season.WINTER);				//输出:WINTER}
    }
    //未重写toSpring()的结果
    String toString(): 默认返回的是常量名(对象名),可以继续手动重写该方法!
    
  • name() 得到当前枚举常量的名称。建议优先使用toString()。

    public class SeasonTest{public static void main(String []args){System.out.println(Season.SPRING.name());System.out.println(Season.SUMMER.name());System.out.println(Season.AUTUMN.name());System.out.println(Season.WINTER.name());}
    }
    //输出结果
    //SPRING
    //SUMMER
    //AUTUMN
    //WINTER
    String name():得到当前枚举常量的名称。建议优先使用toString()
  • values()

    public class SeasonTest{public static void main(String []args){Season[] values = Season.values();for (int i = 0; i < values.length; i++) {System.out.println(values[i]);}}
    }
    //输出结果
    //SPRING
    //SUMMER
    //AUTUMN
    //WINTER
    static 枚举类型[] values():返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值,是一个静态方法
    
  • valueOf(String objName)

    static 枚举类型 valueOf(String name):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentExceptionpublic class SeasonTest{public static void main(String []args){String objName = "SPRING";Season season1 = Season.valueOf(objName);System.out.println(season1);	//SPRINGSeason season2 = Season.valueOf("WINTER");System.out.println(season2);	//WINTER}
    }
    //若重写了toSpring()方法,则按照重写后的来输出
    
  • int ordinal( )

    public class SeasonTest{public static void main(String []args){System.out.println(Season.SPRING.ordinal());System.out.println(Season.SUMMER.ordinal());System.out.println(Season.AUTUMN.ordinal());System.out.println(Season.WINTER.ordinal());}
    }
    //int ordinal():返回当前枚举常量的次序号,默认从0开始
    //输出结果 
    //0
    //1
    //2
    //3
    

枚举类实现接口操作

  • 枚举类实现接口,在枚举类中重写接口中的抽象方法。当通过不同的枚举类对象调用此方法时,执行的是同一个方法

    enum Season implements Info{SPRING("春天","春暖花开"),SUMMER("夏天","烈日炎炎"),AUTUMN("秋天","秋高气爽"),WINTER("冬天","白雪皑皑");private final String seasonName;	//季节名称private final String seasonDesc;	//季节描述private Season(String seasonName,String seasonDesc){this.seasonName = seasonName;this.seasonDesc = seasonDesc;}public String getSeasonName(){returtn this.seasonName;}public String getSeasonDesc(){return this.seasonName;}public void show(){System.out.println("这是一个季节");}
    }
    interface Info{void show();
    }public class SeasonTest{public static void main(String []args){Season.SPRING.show();Season.SUMMER.show();}
    }
    //此时,重写方法是在Season类中
    //输出结果:
    // 这是一个季节
    // 这是一个季节
    
  • 让枚举类的每一个对象都重写接口中的抽象方法,当通过不同的枚举类对象调用此方法时,执行的是不同的方法

    interface Info{void show();
    }enum Season implements Info{SPRING("春天","春意盎然"){public void show(){System.out.println("春风又绿江南岸");}},SUMMER("夏天","烈日炎炎"){public void show(){System.out.println("映日荷花别样红");}},AUTUMN("秋天","秋高气爽"){public void show(){System.out.println("秋水共长天一色");}},WINTER("冬天","白雪皑皑"){public void show(){System.out.println("窗含西岭千秋雪");}};private final String seasonName;private final String seasonDesc;private Season(String seasonName,String seasonDesc){this.seasonName = seasonName;this.seasonDesc = seasonDesc;}public String getSeasonName(){return this.seasonName;}public String getSeasonDesc(){return this.seasonDesc;}}
    public class SeasonTest{public static void main(String []args){Season []seasons = Season.values();for(int i = 0; i < seasons.length;i++){seasons[i].show();}}
    }//输出
    春风又绿江南岸
    映日荷花别样红
    秋水共长天一色
    窗含西岭千秋雪
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

paligemma、Grounding-DINO-1.5简单无需标注无需训练直接可以使用的VLM图像到文本模型

1、paligemma 参考:https://github.com/google-research/big_vision/blob/main/big_vision/configs/proj/paligemma/README.md 模型架构: 文本与图像特征一起送入大模型 在线体验网址: https://huggingface.co/spaces/big-vision/paligemma 通过文字prompt既可与图片对话…

ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

HCIP-Datacom-ARST自选题库__MPLS判断【道题】

1.在MPLS网络中&#xff0c;每台设备依然要遵循最长匹配原则&#xff0c;即每台设备都要有到达目的IP地址的路由&#xff0c;否则网络设备会丢弃收到的MPLS报文。 2.在MPLS网络中&#xff0c;运行DP协议的SR之间通过交换LDP消息来实现邻居发现、会活建立与维护以及标签管理等功…

Java 9的模块化系统(JPMS):探讨Java 9引入的模块化系统,并解释其对Java生态的影响

Java 9 模块化系统(JPMS)简介 Java 9 模块系统,也被称为 Java 平台模块系统 (JPMS),它是 Java 9 的核心特性之一,用于改进 Java 的大型应用的封装性和可维护性。 JPMS 的主要功能如下: 模块化代码:JPMS 允许你将代码库划分为不同的模块,在没有显示声明的情况下,模…

QT creator centralwidget前面有个禁止符号

centralwidget前面有个禁止符号&#xff1a;表示分拆布局 在主窗口空白处&#xff0c;右键&#xff0c;选择布局即可选择不同的布局方式&#xff0c;表示对窗口内所有控件部件进行布局&#xff0c;不如垂直布局。

AI商业化之路:开源大模型VS闭源大模型

开源大模型与闭源大模型&#xff0c;你更看好哪一方&#xff1f; 简介&#xff1a;评价一个AI模型“好不好”“有没有发展”&#xff0c;首先就躲不掉“开源”和“闭源”两条发展路径。对于这两条路径&#xff0c;你更看好哪一种呢&#xff1f; 探讨开源大模型和闭源大模型在商…

【机器学习】—机器学习和NLP预训练模型探索之旅

目录 一.预训练模型的基本概念 1.BERT模型 2 .GPT模型 二、预训练模型的应用 1.文本分类 使用BERT进行文本分类 2. 问答系统 使用BERT进行问答 三、预训练模型的优化 1.模型压缩 1.1 剪枝 权重剪枝 2.模型量化 2.1 定点量化 使用PyTorch进行定点量化 3. 知识蒸馏…

线性回归 10 种图表 上【建议收藏】

这段时间&#xff0c;不少同学提到了一些图表的问题。 每次在使用matplotlib画图&#xff0c;运用这些图表说明问题的时候&#xff0c;很多时候是模糊的&#xff0c;比如说什么时候画什么图合适&#xff1f; 其实这个根据你自己的需求&#xff0c;自己的想法来就行。 今天的…

不是人人都懂的学习要点

不是人人都懂的学习要点_什么叫独特?别人都学的东西,人人都懂的东西咱就不学了,学别人知道的少的东西-CSDN博客

高光谱成像技术简介,怎么选择成像方案?

目录 一、什么是光谱&#xff1f;二、光谱和光谱分析方法的类型三、多光谱和高光谱的区别四、高光谱在水果品质检测中的应用1. 高光谱成像系统2. 高光谱图像的获取方式3. 高光谱图像处理与分析4. 在水果品质检测中的应用总结 五、针对自己的应用场景怎么使用高光谱技术六、参考…

海山数据库(He3DB)从方法到实践,构建以场景为中心的体验管理体系

编者按&#xff1a;体验优化的过程中设计师经常会遇到几个阶段&#xff0c;发现问题、定义问题、优化问题、查看反馈&#xff0c;但在产品快速迭代的过程中&#xff0c;体验的问题经常被归类到“不紧急”需求中&#xff0c;并逐步转为长尾问题&#xff0c;这些不被重视的问题聚…

重组蛋白表达中的质粒构建流程-卡梅德生物

我们在进行重组蛋白表达服务时&#xff0c;首先要根据序列特点合成基因并构建到合适的载体上。重组蛋白表达中的质粒构建是一个复杂但关键的过程&#xff0c;它涉及到将目标基因&#xff08;即编码所需蛋白质的基因&#xff09;插入到适当的质粒载体中&#xff0c;以便在后续的…

【OpenGL实践10】关于几何着色器

目录 一、说明 二、几何着色器 2.1 设置 2.2 基本几何着色器 2.2.1 输入类型 2.2.2 输出类型 2.2.3 顶点输入 2.2.4 顶点输出 2.3 创建几何着色器 2.4 几何着色器和顶点属性 三、动态生成几何体 四、结论 练习 一、说明 几何着色器的应用比较高级&#xff0c;关于…

Epson推出的FC2012AN晶体专为小尺寸、低ESR应用设计

在可穿戴设备、loT产品、无线通信模块等领域&#xff0c;对于小型化、低功耗和高精度的时钟需求日益增长。Epson推出的FC2012AN系列晶体单元凭借其小尺寸、低ESR等特性使其成为这些应用的理想选择。 FC2012AN系列是一款32.768K频率的晶体单元&#xff0c;频率偏差为 20x10-6…

【云原生】kubernetes中的service原理、应用实战案例解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

DSPy - prompt 优化

文章目录 一、关于 DSPy与神经网络的类比常见问题解答**DSPy 优化器可以调整什么&#xff1f;****我应该如何使用 DSPy 完成我的任务&#xff1f;****如果我对提示或合成数据生成有更好的想法怎么办&#xff1f;**DSPy 代表什么&#xff1f; 二、安装三、文档A) 教程B) 指南C) …

Python列表推导式:简洁与高效的编程艺术

Python列表推导式&#xff1a;简洁与高效的编程艺术 在Python编程世界中&#xff0c;列表推导式&#xff08;List Comprehension&#xff09;无疑是一个强大而实用的工具。它允许我们以简洁、易读的方式快速生成列表&#xff0c;减少了编写循环和条件语句的需要。本文将详细介…

全球手游4月战报,《Monopoly GO!》荣耀再续!全球手游畅销榜冠军

易采游戏网5月22日消息&#xff0c;在刚刚过去的四月里&#xff0c;全球移动游戏市场的角逐愈发激烈。根据最新发布的数据&#xff0c;Scopely旗下的经典游戏《Monopoly GO!》再次蝉联全球手游畅销榜首冠军宝座&#xff0c;展现了无与伦比的市场魅力与玩家黏度。 4月Scopely《M…

中霖教育怎么样?二建继续教育几年一次?

中霖为大家介绍&#xff1a; 根据相关规定&#xff0c;二级建造师执业资格注册证书设定有效期限为三年。为确保持证人员的专业能力&#xff0c;在规定的期限内需要完成规定的继续教育课程并参加考核&#xff0c;以此来维护其职业资质的连续性。 在执业资格证书的有效期满前&a…

zabbix从6.0.x升级到6.0.x

一、升级原因 这两天安全方面暴露了zabbix的版本漏洞&#xff0c;具体漏洞信息如下&#xff1a; Zabbix Server Audit Log SQL 注入漏洞预警 近日&#xff0c;某机构获取到Zabbix Server组件中修复了一个SQL注入漏洞&#xff08;CVE-2024-22120&#xff09;&#xff0c…