【JAVA学习笔记】43 - 枚举类

news2024/12/24 11:43:06

项目代码

https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter11/src/com/yinhai/enum_

〇、创建时自动填入版权 作者等信息

 如何在每个文件创建的时候打入自己的信息以及版权呢

菜单栏-File-setting-Editor-File and Code Templaters -Includes-输入信息 如下图

一、引出

要求创建季节(Season)对象,请设计并完成

/**
 * @author 银海
 * @version 1.0
 */
public class Enumeration01 {
    public static void main(String[] args) {
        Season season = new Season("spring", "worm");
        Season season1 = new Season("winter", "cold");
        Season season2 = new Season("summer", "hot");
        Season season3 = new Season("autumn", "cold");
        //对于季节而言,是固定的四个 不会有更多
        //因此这样设计不好,所以引出枚举类,把对象一个个列举出来
        Season other = new Season("asdasdas", "~~~~~~~~~");
    }
}
class Season{
    private String name;
    private String desc;

    public Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

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

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

二、两种实现方式

1.自定义类实现枚举

        1)不需要提供setXxx方法,因为枚举对象值通常为只读.

        2)对枚举对象/属性使用final + static 共同修饰,实现底层优化.

        3)枚举对象名通常使用全部大写,常量的命名规范

        4)枚举对象根据需要,也可以有多个属性

public class Enumeration02 {
    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
        System.out.println(Season.WINTER);
    }
}

class Season {
    private String name;
    private String desc;
    //3.在Season内部直接创建对象,加上public static
    //4.优化可以加入final修饰符
    public final static Season SPRING = new Season("春天", "暖");
    public final static Season WINTER = new Season("冬天", "寒冷");
    public final static Season AUTUMN = new Season("秋天", "冷");
    public final static Season SUMMER = new Season("夏天", "热");

    //1.私有化构造器

    public Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
    //2.去掉set方法 防止被修改
    public String getName() {
        return name;
    }
    public String getDesc() {
        return desc;
    }

}

小结:进行自定义类实现枚举有如下特点

        1)构造器私有化

        2)本类内部创建一组对象

        3)对外暴露对象(通过为对象添加public final static修饰符)

        4)可以提供get方法,但是不要提供set

2.enum关键字实现枚举(引出)

public class Enumeration03 {
    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
        System.out.println(Season.WINTER);
    }
        
}
enum Season {
    //1.使用enum代替class
    //2.//常量名(实参列表);
    //3.如果有多个常量(对象)
    SPRING("春天", "暖"),WINTER("冬天", "寒冷"),AUTUMN("秋天", "冷"),
    SUMMER("夏天", "热");//等价于自定义的public final static Season SPRING = new Season("春天", "暖");
    //4.如果使用enum来实现枚举,要求将常量对象写在前面
    private String name;
    private String desc;
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
    public String getName() {
        return name;
    }
    public String getDesc() {
        return desc;
    }

}

三、enum实现枚举注意事项和细节

1.当我们使用enum关键宇开发一个枚举类时, 默认会继承Enum类

        使用javap反编译

                

        如何使用javap反编译呢,定位class文件,使用cmd,输入javap 想要反编译的文件.class

2.调用的构造器

        传统的public static final Season2 SPRING = new Season2("春天","温暖"); 简化成SPRING("春天","温暖"),这里必须知道,它调用的是哪个构造器,注意得是private

3.如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略

4.当有多个枚举对象时,使用,逗号 间隔最后用一个分号结尾

5.枚举对象必须放在枚举类的行首.
 

四、课堂练习

                

正确 调用的是Gender 的无参构造器,没有写构造器也隐含在类内

        ​​​​​​​        

会继承父类Enum,本类是没有toString的所以要找父类有没有toString

        ​​​​​​​        ​​​​​​​

有,名字就是BOY(有个疑问,开一章节再看看),输出true

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

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

相关文章

SpringBoot整合Activiti7——任务监听器(七)

文章目录 一、任务监听器事件类型配置方式(选)代码实现xml文件创建监听器class方式expression方式delegateExpression 测试流程部署流程启动流程完成任务 一、任务监听器 任务监听器可以在任务创建、任务分配、任务完成、任务删除发生时触发,从而执行相应的逻辑。 事…

rust学习——方法 Method

文章目录 方法 Method定义方法self、&self 和 &mut self方法名跟结构体字段名相同 带有多个参数的方法关联函数多个 impl 定义为枚举实现方法 rust 结构体与枚举的区别回答1回答2 方法 Method 从面向对象语言过来的同学对于方法肯定不陌生,class 里面就充斥…

nginx 动静分离 nginx防盗链

一、动静分离环境准备静态资源配置(10.36.192.169)安装nginx修改配置文件重启nginx 动态资源配置(192.168.20.135)yum安装php修改nginx配置文件重启nginx nginx代理机配置(192.168.20.134)修改nginx子自配置文件重启nginx 客户端访问 二、防盗链nginx防止…

【proteus】8086仿真/汇编:创建项目并添加汇编代码文件

1.创建好新项目 2.点击source code 弹出VSM 3. 4.注意两个都不勾选 可以看到schematic有原理图出现 5. 再次点击source code 6.project/project settings,取消勾选embed 7. add 8.输入文件名保存后: 注意:proteus不用写dos的相关语句 。

内存CACHE同步引起OSD时间戳显示异常

目前在用的这款芯片,图像翻转有专门的一个图像处理IP来完成,同时这个IP又支持叠加OSD的功能,但是在设计的时候叠加OSD的功能单元又在图像翻转单元的前面,导致了开启了图像翻转功能后,OSD就倒着显示、位置不在原来的坐标…

vue3 computed 和 watch 的差异

目录 前言 用法 computed watch 代码 理解 高质量的使用 Vue.js作为一种现代化的前端框架,提供了丰富的特性来帮助开发者构建高效和响应式的用户界面。在这其中,computed 和 watch 是两个非常重要的选项,它们都用于处理数据的变化&…

VUE到底有什么好处?

网上有许多前端开发框架的对比,相对的,VUE在综合评分方面还是优秀的。以下是一些State of JavaScript调查数据结果: 使用率:VUE使用者在调研开发者中占比 51%; 开发者满意度:VUE的综合开发者满意度达到64%…

【算法练习Day27】买卖股票的最佳时机 II跳跃游戏跳跃游戏 II

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 买卖股票的最佳时机 II跳跃…

智能视频监控平台EasyCVR接口调用注意事项汇总!

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

汽车4S店如何在数字化管理下,提高市场竞争力

在所有人都认为疫情过后,经济形势会一路向阳,但是,实际情况出乎所有人的意料,各行各业举步维艰。 新闻爆出的各大房地产,恒大的2.4万亿让人瞠目结舌,还有碧桂园和融创,也是债台高筑了&#xff…

Access denied for user ‘root‘@‘localhost‘ (using password:YES) 解决方案(禅道相关)

如果是忘记Mysql密码或更改权限后访问不了的问题请直接跳转以下链接: MySQL登录时出现Access denied for user ‘root‘‘localhost‘ (using password: YES)无法打开的解决方法 关于这个问题,网上查到的解决方法基本都是因为忘记Mysql密码或者用户权限问…

利用Jpom在线构建Spring Boot项目

1 简介 前面介绍了运用Jpom构建部署Vue项目,最近研究了怎么部署Spring Boot项目,至此,一套简单的前后端项目就搞定了。 2 基本步骤 因为就是一个简单的自研测试项目,所以构建没有使用docker容器,直接用java -jar命令…

Go语言入门心法(十三): 反射认知升维

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(七): 并发与通道 Go语言入门心法(八): mysql驱动安装报错o…

图像数据增强算法汇总(Python)

一、数据增强概述 数据增强是一种通过使用已有的训练样本数据来生成更多训练数据的方法,可以应用于解决数据不足的问题。数据增强技术可以用来提高模型的泛化能力,减少过拟合现象。比如在狗猫识别项目中,通过随机旋转、翻转和裁剪等数据增强…

什么是CDN?

目录 1.什么是CDN? 2.CDN工作原理 3.为什么要使用CDN? 4.CDN与传统网站访问的区别 5.CDN的应用场景 6.术语解释 1.什么是CDN? CDN英文全称Content Delivery Network,中文翻译即为内容分发网络。它是建立并覆盖在承载网之上…

【带头学C++】 ----- 1.基础知识 ---- 1.20 Typedef 为已有的类型取别名

1.20 Typedef 为已有的类型取别名 1.typedef语法格式 在 C 中,可以使用 typedef 关键字来为已有的类型创建一个别名。这对于提高代码可读性、简化类型声明以及增加代码的可维护性非常有用。 下面是 typedef 的语法格式: typedef 旧类型名 别名; 2.使…

Unity的碰撞检测

(一)测试前准备工作 1.创建两个游戏对象,分别取名为”Player”和”Enemy”,并且为名为”Player”的游戏对象设置Tag也为”Player”,二者在场景中如图1所示: 图1 绿为Enemy,红为Player 2.编写脚本…

《Linux从练气到飞升》No.22 Linux 进程间通信

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

kafka入门03——简单实战

目录 安装Java 安装Zookeeper 安装Kafka 生产与消费 主要是记录下Kafka的安装配置过程,前置条件需要安装jdk和zookeeper。 安装Java 1.Oracle官网下载对应jdk安装包 官网地址:Java Downloads | Oracle 好人分享了下载需要的oracle账号&#xff0c…

linux基本指令(Chapter 2)

linux基本指令(二) 1.date指令 语法:date [option] [format] date命令的作用是显示时间:使用date %Y:%m:%d可以指定格式显示时间.例如:(注意这里的和%之后不要有任何间隔)并且这里是加号,并不是减号 1.在显示方面,使用者可以设定欲显示的格式,格式设…