java学习--枚举

问题引入:

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

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;
//    }@Overridepublic 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;
//    }@Overridepublic String toString() {return "Season_{" +"name='" + name + '\'' +", feel='" + feel + '\'' +'}';}
}

示例一:

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

示例3

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

return的名称就是对象名

enum常用方法说明

name:

ordinal:

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

补充知识:

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

valueof:

compareTo

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

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

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

相关文章

Javascript前端面试基础5【每日更10】

let与var的区别 let命令不存在变量提升,如果在let前使用,会导致报错(var存在变量提升)如果块区中存在let和const命令,就会形成封闭作用域不允许重复声明,因此,不能在函数内部重新声明参数 m…

牛客网-E-分组

题目来源:牛客 题目描述: 链接:登录—专业IT笔试面试备考平台_牛客网 dd当上了宣传委员,开始组织迎新晚会,已知班里有n个同学,每个同学有且仅有一个擅长的声部,把同学们分成恰好m组,…

【软考】设计模式之生成器模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.生成器模式(Builder Pattern),也称为建造者模式,是设计模式中的一种创建型模式。2.将一个复杂对象的构建与它的表示分离,使得…

RT-Thread Studio搭建 Renesa Version Board开发环境

目录 概述 1 认识Version Board 1.1 Vision-Board简介 1.2 Vision-Board的资源 2 搭建Version Board开发环境 2.1 RT Thread Studio 2.2 安装SDK 3 开发环境验证 3.1 创建项目 3.2 编译和下载 概述 本文主要介绍使用RT-Thread Studio搭建 Renesa Version Board开发环…

MySQL服务启动与关闭

1. 服务启动与关闭 在生产环境中,数据库服务的运行状态一般是不会进行随意调整的,在特殊场景下需要提前审批后,才能进行调整。在进行数据库服务关闭前,可以将业务先切换到备库(从库),再停止原有…

自定义prometheus监控获取nginx_upstream指标

1、前言 上篇文章介绍了nginx通过nginx_upstream_check_module模块实现后端健康检查,这篇介绍一下如何自定义prometheus监控获取nginx的upstream指标来实时监控nginx。 2、nginx_upstream_status状态 支持以下三种方式查看nginx_upstream的状态 /status?formatht…

day05 Router、vuex、axios

配置 router和vuex需要在创建vue项目的时候,开始的时候选择Manually select features,于是就可以在下一个创建配置讯问中选择router和vuex。 axios则需要执行命令行: npm install axios -S 之后再在需要发送请求的view导入即可。 router…

【H.264】H.264详解(二)—— H264视频码流解析示例源码

文章目录 一、前言二、示例源码【1】目录结构【2】Makefile源码【3】h264parser.c源码【4】编译运行【5】源码下载地址 声明:此篇示例源码非原创,原作者雷霄骅。雷霄骅,中国传媒大学通信与信息系统专业博士生,在此向雷霄骅雷神致敬…

放大电路总结

补充: 只有直流移动时才有Rbe动态等效电阻 从RsUs看进去,实际上不管接了什么东西都能够看成是一个Ri(输入电阻) Ri Ui/Ii Rb//Rbe Ui/Us Ri/(RiRs) Aus (Uo/Ui)*(Ui/Us) Au *Ri/(RiRs) 当前面是一个电压源的信号 我们就需要输入电阻更大 Ro--->输出电阻--->将…

RustDesk远程控屏软件使用教学

RustDesk自建服务器使用教学RustDesk远程控屏软件使用教学 下载软件后 右键管理员运行 点击右上角设置按钮 管理员运行 保证启动服务 点击左侧导航栏网络按钮 复制域名或者ip地址到 ID服务器 输入框 然后点击应用即可

C语言第三天笔记

变量 概念 表面:程序运行过程中取值可以改变的数据 实质:变量其实代表了一块内存区域/单元/空间。变量名可视为该区域的标识。 整个变量分为三部分: 变量名:这个只是变量的一个标识,我们借助变量名来存取数据。 变…

数据库实例迁移实践

背景 随着业务发展,数据库实例磁盘逐渐升高,告警频繁,且后续可能会对DDL产生影响(尤其是借助ghost等工具执行的DDL)。 该实例有多个库,则需要迁移其中的一个或几个单库到其他实例,为什么不做分…

第G4周:CGAN|生成手势图像 | 可控制生成

本文为🔗365天深度学习训练营 中的学习记录博客 原作者:K同学啊 理论知识: 条件生成对抗网络(CGAN)是在生成对抗网络(GAN)的基础上进行了一些改进。对于原始GAN的生成器而言,其生成的…

探索 SPL-404 协议标准:NFT 与 DeFi 的融合

在快速发展的数字资产领域中,NFT 协议标准持续演变,改变了我们对数字所有权和互动方式的理解。从 Art 到 Gamefi 等等,NFT 已经演变成数字经济的重要组成部分,吸引了广泛关注。遵循 ERC404 协议,SPL404 概念在 Solana …

昇思25天学习打卡营第22天|CV-Vision Transformer图像分类

打卡 目录 打卡 ViT简介 模型结构 基于ViT实现ImageNet分类任务 环境准备与数据读取 模型解析 Transformer基本原理 Self-Attention模块 代码实现 Transformer Encoder 代码实现 ViT模型的输入 Patch Embedding代码处理输入 整体构建ViT 模型训练与推理 模型训…

金字塔监督在人脸反欺骗中的应用

介绍 论文地址:https://arxiv.org/pdf/2011.12032.pdf 近年来,人脸识别技术越来越普及。在智能手机解锁和进出机场时,理所当然地会用到它。人脸识别也有望被用于管理今年奥运会的相关人员。但与此同时,人们对人脸欺骗的关注度也…

【无标题】Git(仓库,分支,分支冲突)

Git 一种分布式版本控制系统,用于跟踪和管理代码的变更 一.Git的主要功能: 二.准备git机器 修改静态ip,主机名 三.git仓库的建立: 1.安装git [rootgit ~]# yum -y install git 2.创建一个…

【Linux】syscall sys_write流程摸索

这是通过tty进行摸索sys_write的流程。 在前面的博客里,我们可以看到基于内核C语言源代码日志打印,在打印的日志里边包含:日期,时间,当前文件所在代码目录,当前执行函数名,当前文件执行行号&am…

苦学Opencv的第十一天:图像的形态学操作

Python OpenCV从入门到精通学习日记:图像的形态学操作 前言 图像形态学是图像处理中的一个重要分支,主要关注图像中物体的形状和结构。通过形态学操作,我们可以对图像进行有效的分析和处理,例如图像的腐蚀与膨胀、开运算与闭运算…

nginx的学习(一):nginx的基本概念和反向代理

简介 nginx的基本概念,以及反向代理的配置 nginx 是一个高性能的http和反向代理web服务器及电子邮件(IMAP/POP3/SMTP)代理服务器。 相关的基本概念 正向代理 客户端配置代理服务器,通过代理服务器访问互联网。 反向代理 客…