java学习--枚举

news2024/11/14 20:54:12

问题引入:

当需要解决一个季节类的问题,我们使用学到的类与对象,创建一个季节的类然后添加构造器在进行分装就可以实现,但问题也随之而来,这样不仅可以有正常的四季还可以添加其他不存在的四季以及可以更改四季的属性

package com.enumerate.test01;
/*
@author:我与java相爱相杀
今天又是努力学习的一天!!!!
*/

public class Season {
    public static void main(String[] args) {
        Season_ season = new Season_("夏天", "炎热");
        Season_ season1 = new Season_("冬天", "寒冷");
        Season_ season2 = new Season_("秋天", "凉爽");
        Season_ season3 = new Season_("春天", "温暖");
        //以上为我们所有的四季,但是使用这种方法创建季节类,除了可以创建正常的四季
        //还可以随便创造其他不存在的季节以及可以随意更改属性
        Season_ season4 = new Season_("黑天", "牛逼");
        season1.setFeel("好冷");
        //这种情况是我们不想要的,我们只需要固定的四季所以就需要改进

    }
    
}
class Season_{
    private String name;
    private String feel;

    public Season_(String name, String feel) {
        this.name = name;
        this.feel = feel;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getFeel() {
        return feel;
    }

    public void setFeel(String feel) {
        this.feel = feel;
    }
}

枚举简介:

自定义枚举类型

代码实现:
package com.enumerate.test01;
/*
@author:我与java相爱相杀
今天又是努力学习的一天!!!!
*/

public class Season {
    public static void main(String[] args) {
//        Season_ season = new Season_("夏天", "炎热");
//        Season_ season1 = new Season_("冬天", "寒冷");
//        Season_ season2 = new Season_("秋天", "凉爽");
//        Season_ season3 = new Season_("春天", "温暖");
//        //以上为我们所有的四季,但是使用这种方法创建季节类,除了可以创建正常的四季
//        //还可以随便创造其他不存在的季节以及可以随意更改属性
//        Season_ season4 = new Season_("黑天", "牛逼");
//        season1.setFeel("好冷");
//        //这种情况是我们不想要的,我们只需要固定的四季所以就需要改进
        System.out.println(Season_.Fall);

    }

}
class Season_{
    private String name;
    private String feel;
    //3.因为构造器被设置为私有的,所以我们需要在本类中就将需要的对象创建好
    //Static是为了能够直接被类名调用,不用在外创建对象才能使用
    //final是进一步的严谨,使得后面的操作无法再改变对象
    public static final Season_ Spring=new Season_("春天", "温暖");
    public static final Season_ Summer=new Season_("夏天", "炎热");
    public static final Season_ Fall=new Season_("秋天", "凉爽");
    public static final Season_ Winter=new Season_("冬天", "寒冷");

    //1.为了实现不让外部随意定义其他的季节,就得将构造器设为私有的
    private Season_(String name, String feel) {
        this.name = name;
        this.feel = feel;
    }
    public String getName() {
        return name;
    }
    //2.为了不让外部更改设置好的对象属性,我们将所有setxx()方法注销,

//    public void setName(String name) {
//        this.name = name;
//    }

    public String getFeel() {
        return feel;
    }

//    public void setFeel(String feel) {
//        this.feel = feel;
//    }

    @Override
    public String toString() {
        return "Season_{" +
                "name='" + name + '\'' +
                ", feel='" + feel + '\'' +
                '}';
    }
}

enum关键字枚举

代码实现:
package com.enumerate.test01;
/*
@author:我与java相爱相杀
今天又是努力学习的一天!!!!
*/

public class Season {
    public static void main(String[] args) {
//        Season_ season = new Season_("夏天", "炎热");
//        Season_ season1 = new Season_("冬天", "寒冷");
//        Season_ season2 = new Season_("秋天", "凉爽");
//        Season_ season3 = new Season_("春天", "温暖");
//        //以上为我们所有的四季,但是使用这种方法创建季节类,除了可以创建正常的四季
//        //还可以随便创造其他不存在的季节以及可以随意更改属性
//        Season_ season4 = new Season_("黑天", "牛逼");
//        season1.setFeel("好冷");
//        //这种情况是我们不想要的,我们只需要固定的四季所以就需要改进
        System.out.println(Season_.WINTER);
//        int a[ ]={1,2,3};
//        for (int i:a)
//        System.out.println(i);
//        Season_ season[]=Season_.values();
        //去Season枚举类型中找,找到了就返回没找到就报错
//        Season_ spring = Season_.valueOf("SPRING");
//        System.out.println(spring);

    }

}
//1.使用枚举关键字则需要将class关键字改成enum
enum  Season_{
    //然后将需要的常量(对象),一一列举出来,每个之间需要用逗号隔开,而且必须位居首行。
    SPRING("春天","温暖"),Fall("夏天", "炎热"),
    Summer("夏天", "炎热"),WINTER("冬天", "寒冷"),S;//调用默认的构造器可以省略括号
    private String name;
    private String feel;

    //3.因为构造器被设置为私有的,所以我们需要在本类中就将需要的对象创建好
    //Static是为了能够直接被类名调用,不用在外创建对象才能使用
    //final是进一步的严谨,使得后面的操作无法再改变对象
//    public static final Season_ Spring=new Season_("春天", "温暖");
//    public static final Season_ Summer=new Season_("夏天", "炎热");
//    public static final Season_ Fall=new Season_("秋天", "凉爽");
//    public static final Season_ Winter=new Season_("冬天", "寒冷");
    //需要调用默认的就需要手动创建一个默认的构造器
private Season_(){}
    //1.为了实现不让外部随意定义其他的季节,就得将构造器设为私有的
    private Season_(String name, String feel) {
        this.name = name;
        this.feel = feel;
    }
    public String getName() {
        return name;
    }
    //2.为了不让外部更改设置好的对象属性,我们将所有setxx()方法注销,

//    public void setName(String name) {
//        this.name = name;
//    }

    public String getFeel() {
        return feel;
    }

//    public void setFeel(String feel) {
//        this.feel = feel;
//    }

    @Override
    public String toString() {
        return "Season_{" +
                "name='" + name + '\'' +
                ", feel='" + feel + '\'' +
                '}';
    }
}

示例一:

其实底层代码是该类继承了Enum类内代码跟自定义枚举差不多可用javap查看该.class文件

示例3

如果,调用的是无参构造,但是你写了个有参构造器,那么你需要手动把无参加上去,因为,有参构造器会将无参构造器覆盖,

return的名称就是对象名

enum常用方法说明

name:

ordinal:

values:该方法是隐藏的,需要反编译才看得到

补充知识:

增强for循环:从数组中依次取出数值赋给i直到最后一个,然后结束for循环

valueof:

compareTo

编号的对比,返回两个编号的差值

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

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

相关文章

ElasticSearch学习篇15_《检索技术核心20讲》进阶篇之TopK检索

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243,文档形式记录笔记。 相关问题: ES全文检索是如何进行相关性打分的?ES中计算相关性得分的时机?如何加速TopK检索?三种思路 精准To…

广州数据中心机房服务器搬迁规划原则

数据中心机房搬迁,需要各个技术团队的紧密配合,制定详细周密的搬迁方案和实施流程,分批实施。作为华南地区主流的数据中心服务商,友力科技(广州)有限公司,专注数据中心机房服务器搬迁&#xff0…

[数据集][目标检测]蝗虫检测数据集VOC+YOLO格式1501张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1501 标注数量(xml文件个数):1501 标注数量(txt文件个数):1501 标注…

Python服务器和客户端功能库之websockets使用详解

概要 WebSockets 是一种在单个 TCP 连接上进行全双工通信的协议,特别适用于需要低延迟和高频率数据传输的实时应用,例如在线游戏、聊天应用和实时数据流。websockets 是一个基于 asyncio 的 Python 库,旨在提供简单易用的 WebSockets 服务器…

Linux进程信号详解【下】

🌎 Linux进程信号详【下】 文章目录: Linux信号详解 核心转储 信号保存       信号的三种状态       信号集操作函数         sigset_t类型接口         sigprocmask接口         sigpending接口         …

会员信息管理系统-计算机毕业设计源码38258

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3开发技术 1.3.1 Spring Boot框架 1.3.2 Java语言 1.3.3 MySQL数据库 1.4论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 登录流程 2.2.2数据删除流程 2.3 系统功能分析 2.4 系统用例分析…

我的世界!

每位冒险家在《我的世界》中的出生点都各不相同, 有的出生在桦木森林,有的出生在草原, 还有的出生在临近海洋的沙滩。 这些环境叫做生物群系,也常被称为生态系统。 在《我的世界》中的不同生物群系具有不同的地域特色—— 不…

TDS传感器

目录 一、实物图 二、原理图 引脚定义 模块特性 三 、简介 四、注意事项 源文件下载 可访问底部联系方式也可前往电子校园网官网搜索关键词 关键词: TDS传感器 一、实物图 二、原理图 引脚定义 …

稳定、低成本、兼容性强的无线串口通信选择-适用于多场景的高性能无线串口模块

LoRa610Pro是思为无线的一款无线串口通讯模块采用了先进的LoRa扩频调制跳频技术,高效的接收灵敏度,具有超强的抗干扰性,还增强了通信的穿透能力和距离,相较于传统的FSK和GFSK产品有明显的优势。 高效的接收灵敏度 由于采用了LoRa…

学习记录day19——数据结构 查找算法

概念 在给定数据元素的某个值,在查找表中确定一个其关键字等于给定值的数据元素的操作,叫做查找 查找的分类 顺序查找:将待查找数据,进行全部遍历一遍,直到找到要查找的元素 折半查找:每次都去除一半的查找范围的查找方式&#x…

【C++高阶】哈希之美:探索位图与布隆过滤器的应用之旅

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:模拟实现unordered 的奥秘 🌹🌹期待您的关注 🌹🌹 ❀哈希应用 &#x1f4…

PyQt5 + selenium,自动票务工具,演唱会门票,学习使用

PyQt5 selenium;在damai工具的基础上加入了UI界面,并将应用做了打包工作,主要是方便不会/不想折腾环境的用户使用,抢票的核心代码来自由于原作者不再维护,自己修改了部分代码。 安装教程 解压安装包到任意位置&…

U盘损坏无法访问?解锁两大高效数据恢复秘籍

U盘损坏之痛:数据失联的困境 在日常生活中,U盘作为数据交换与存储的重要工具,其便捷性无可替代。然而,当U盘遭遇损坏,无法被计算机正常访问时,存储在其中的宝贵数据仿佛一夜之间变得遥不可及,这…

关键词查找【Boyer-Moore 算法】

1、【Boyer-Moore 算法】 【算法】哪种算法有分数复杂度?- BoyerMoore字符串匹配_哔哩哔哩_bilibili BM算法的精华就在于BM(text, pattern),也就是BM算法当不匹配的时候一次性可以跳过不止一个字符。即它不需要对被搜索的字符串中的字符进行逐一比较,而…

云盘高速检测的秘密:密封圈外观检测全解析!

密封圈是一种用于填塞、隔离或密封两个相互连接部件之间空隙的圆形密封装置。密封圈通常由橡胶、塑料、金属等材料制成,具有弹性并能在压力作用下填充间隙,防止液体、气体或固体物质泄漏。 密封圈可根据具体应用选择不同材料,如橡胶密封圈适…

UDP网口(3)逻辑组包(下)

文章目录 1.ARP应答验证2.UDP实现思路3.UDP接收验证4.UDP发送验证5.总结与思考6.传送门 1.ARP应答验证 创建一个ARP应答工程,当PC发出ARP请求的时候,手动按下板卡指定按键,将会响应ARP应答。以此验证phy芯片的配置正常,硬件链路正…

node+mysql实现(账户密码,阿里云短信验证,QQ邮箱注册登录,短信验证密码重置,邮箱密码重置)之注册,登录密码重置总篇

node+mysql实现账户登录 注意效果图项目插件代码参数说明短信验证模块邮箱验证模块注册方式登录方式密码重置前端页面部分登录页面账户登录页面(login.html)短信验证登录页面(smsLogin.html)邮箱登录页面(emailLogin.html)注册部分页面短信验证注册页面(register.html)邮…

Profinet 转 EtherCAT 主站网关

一、功能概述 1.1 设备简介 本产品是 PN(Profinet)和 ECAT(EtherCAT)网关,通过数据映射方式工作。 本产品在 PN 侧作为 PN IO 从站,接西门子 PLC 的 Profinet 口;在 ECAT 侧 做为 ECAT 主站,接 ECAT 从站,如伺服驱…

懒人精灵安卓版纯本地离线文字识别插件

目的 懒人精灵是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务,节省大量人工操作的时间。懒人精灵也包含图色功能,识别屏幕上的图像,根据图像的变化自动执行相应的操作。本篇文章主要讲解下更优秀的…

nacos2.x作为配置中心和服务注册和发现以及springcloud使用

目录 一、nacos是什么 二、windows下安装配置nacos 1、准备 2、安装nacos 3、配置nacos 4、启动并且访问nacos 三、springcloud使用nacos作为配置中心 四、springcloud使用nacos进行服务注册与发现 五、springcloud使用nacos进行服务消费 六、nacos的一些高级配置 1…