Java进阶学习笔记20——枚举

news2024/11/14 1:19:43

认识枚举:

枚举是一种特殊的类。

枚举类的格式:

说明:

第一行是罗列枚举的对象名称。只能写合法的标识符(名称),多个名称用逗号隔开。

这些名称本质上都是常量每个变量都会记住枚举类的一个对象。

第二行:可以是类的五大成员。

反编译的情况,我们看到有一个私有的构造器:

javap的用法:我们可以看到更详细的枚举类信息:

枚举类的特点:

枚举类的第一行只能罗列一些名字,这些名称都是常量,并且每个常量记住的都是枚举类的一个一对象。

枚举类的构造器都是私有的(写不写都只能是私有的),因此,枚举类不能创建对象。

枚举类是最终类,不可能被继承。

枚举类中,从第二行开始,可以定义类的其他成员。

编译器为枚举类新增了几个方法,并且枚举类都是继承java.lang.enum类的,从enum类也会继承到一些方法。

测试类:

package cn.ensource.d6_enum;

public class Test {
    public static void main(String[] args) {
        // 目标:认识枚举
        A a1 = A.X;
        System.out.println(a1);

        // 枚举不能创建对象

        // 枚举类的第一行都是常量,记住的是枚举类的对象
        A a2 = A.Y;
        System.out.println(a2);

        // 枚举类提供了一些额外的API
        A[] as = A.values();   // 拿到全部对象

        A a3 = A.valueOf("Z");
        System.out.println(a3.name());
        System.out.println(a3);
        System.out.println(a3.ordinal());  // 索引

    }
}

那抽象枚举如何实现呢?

 

package cn.ensource.d6_enum;

// 抽象枚举
public enum B {
    // 抽象枚举,如何逻辑枚举,因为枚举类B不能直接构建对象,而第一行都是枚举类的对象
    // 那么就要调用私有的构造器来创建对象,里面需要使用方法重写来把抽象方法重写,多态
    X() {     // 构造器
        @Override
        public void go() {     // 构建对象的时候,重写go方法

        }
    },
    Y("张三") {
        @Override
        public void go() {
            System.out.println(getName() + "在跑~");
        }
    };

    private String name;

    private B() {
    }

    private B(String name) {
        this.name = name;
    }

    public abstract void go();

    public String getName() {
        return name;
    }

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

这个代码已经算是比较深了。

测试类中:

多学一招:

使用枚举类实现单例设计模式:

package cn.ensource.d6_enum;

public enum C {
    X;    // 单例
}

好牛啊!!!

枚举的常见应用场景:

非常适合用来表示一组信息,然后作为参数进行传播。

用来做信息的分类和标志。

选择定义一个一个的常量来表示一组信息,并作为参数传输。

参数值不受约束;

选择定义枚举表示一组信息,并作为参数传递。

代码可读性好,参数值得到了约束,对使用者更友好,建议使用。

常量类Constant:

package cn.ensource.d7_enum;

public class Constant {
    public static final int BOY = 0;    // 常量性能没有影响
    public static final int GIRL = 1;
}

测试类:

package cn.ensource.d7_enum;

public class Test {

    public static void main(String[] args) {
        // 目标:掌握枚举的应用场景,做信息标志和分类
//        check(0);
        check(Constant.BOY);
    }

    public static void check(int sex) {
        switch (sex) {     // 硬编码,可读性不好
            case Constant.BOY:
                System.out.println("展示男人想看的信息");
                break;
            case Constant.GIRL:
                System.out.println("展示女人想看的信息");
                break;
        }
    }
}

这个是软编码。

常量还是存在一个问题:

要求是常量,我们还是写自变量。

int sex形参是不受约束的。

常量类Constants2:

package cn.ensource.d7_enum;

public enum Constant2 {
    BOY, GIRL;
}
package cn.ensource.d7_enum;

public class Test {

    public static void main(String[] args) {
        // 目标:掌握枚举的应用场景,做信息标志和分类
//        check(0);
        check(Constant2.BOY);
    }

    public static void check(Constant2 sex) {
        switch (sex) {     // 硬编码,可读性不好
            case BOY:
                System.out.println("展示男人想看的信息");
                break;
            case GIRL:
                System.out.println("展示女人想看的信息");
                break;
        }
    }
}

Constant2是一个枚举类型,里面有BOY和GIRL两个枚举对象。

然后使用枚举对象做形参。

有约束性、严谨!

对程序员也比较友好!

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

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

相关文章

HIVE3.1.3+ZK+Kerberos+Ranger2.4.0高可用集群部署

目录 一、集群规划 二、介质下载 三、基础环境准备 1、解压文件 2、配置环境变量 四、配置zookeeper 1、创建主体 2、修改zoo.cfg 3、新增jaas.conf 4、新增java.env 5、重启ZK 6、验证ZK 五、配置元数据库 六、安装HIVE 1、创建Hiver的kerberso主体 2…

U盘引导盘制作Rufus v4.5.2180

软件介绍 Rufus小巧实用开源免费的U盘系统启动盘制作工具和格式化U盘的小工具,它可以快速将ISO镜像文件制作成可引导的USB启动安装盘,支持Windows或Linux启动,堪称写入镜像速度最快的U盘系统制作工具。 软件截图 更新日志 github.com/pbat…

Digital Image Processing System(DIPS)

数字图像处理系统 Digital Image Processing System(DIPS) 早前版本: ​​​​​​​DIPS_YTPC OCR-CSDN博客

(南京观海微电子)——TFT LCM的作用

VCOM介绍 VCOM是液晶分子偏转的参考电压 ,要求要稳定,对液晶显示有直接影响,具体的屏不同的话 也是不同的。 电压的具体值是根据输入的数据以及Vcom电压大小来确定的,用来显示各种不同灰阶,也就是实现彩色显示GAMMA简…

【知识蒸馏】deeplabv3 logit-based 知识蒸馏实战,对剪枝的模型进行蒸馏训练

本文将对【模型剪枝】基于DepGraph(依赖图)完成复杂模型的一键剪枝 文章中剪枝的模型进行蒸馏训练 一、逻辑蒸馏步骤 加载教师模型定义蒸馏loss计算蒸馏loss正常训练 二、代码 1、加载教师模型 教师模型使用未进行剪枝,并且已经训练好的原始模型。 teacher_mod…

Strategy设计模式

Strategy设计模式举例。 看图&#xff1a; 代码实现&#xff1a; #include <iostream>using namespace std;class FlyBehavior { public:virtual void fly() 0; };class QuackBehavior { public:virtual void quack() 0; };class FlyWithWings :public FlyBehavior …

新人攻略:避开这3大坑,让老员工主动带你飞!

进入职场的新人们&#xff0c;常常会感到困惑和挑战。他们可能会发现自己在与老员工的交流中遇到难题&#xff0c;甚至发现老员工并不愿意花费时间和精力去指导他们。这背后的原因是什么呢&#xff1f;又该如何改善这一现象呢&#xff1f;本文将从新员工的角度出发&#xff0c;…

无人机飞手:ASFC无人机和航模爱好者证书详解

ASFC无人机和航模爱好者证书是由中国航空运动协会&#xff08;ASFC&#xff09;颁发的一种无人机操作资格认证。这种证书在无人机和航模爱好者群体中享有广泛的认可度&#xff0c;并被视为操作无人机的一种重要资质。 ASFC证书的定义和用途十分明确。它是民航局颁发的民用无人驾…

C++中的继承详解

1.继承的概念及定义 1.1继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设计的…

产品数据特性驱动设计

一、什么是数据特性 一个产品在宏观的视角下,是不同功能模块的有机组合;在微观的视角上,是千丝万缕的数据连接。 基于模块化设计思想,对产品进行业务化梳理,对业务进行模块化拆分出功能模块,功能模块就是产品的“逻辑”,而功能中的数据就是“特性”。 业务:比较固定…

马尔可夫和比奈梅-切比雪夫不等式

目录 一、说明 二、自然界的极限性 三、马尔可夫不等式 3.1 最早提出 3.2 马尔可夫不等式的证明 四、 Bienaym–Chebyshev 不等式 4.1 简要回顾Bienaym–Chebyshev 不等式的历史 4.2 Bienaym — Chebyshev 不等式的证明 五、弱大数定律&#xff08;及其证明&#xff09;…

C语言——⾼位优先与低位优先的不同之处是什么?

一、问题 C语⾔的最⼤特⾊就是可移植性好。根据机器类型的不同&#xff0c;⾼位优先与低位优先也不同。那么&#xff0c;最好的可移植的 C 程序应该同时适⽤这两种类型的计算机。下⾯了解⼀下⾼位优先与低位优先的不同之处。 二、解答 所谓的⾼位优先&#xff0c;就是最低的地…

实现排行榜之Mysql的 OrderBy方法

排行榜之Mysql OrderBy实现 1、排行榜系统的功能点 数据收集与计算 排名规则 实时性 可视化展示 周期性更新 2、排行榜系统基本功能要素 MySQL实现方案 数据量较小&#xff0c;业务场景比较简单。可直接使用 新建表 CREATE TABLE leaderboard( id BIGINT UNSIGNED NOT …

21.Happens-Before原则

文章目录 Happens-Before原则1.Happens-Before规则介绍2.规格介绍2.1.顺序性规则(as-if-serial)2.2.volatile规则2.3.传递性规则2.4.监视锁规则2.5.start规则2.6.join()规则 Happens-Before原则 JVM内存屏障指令对Java开发工程师是透明的&#xff0c;是JMM对JVM实现的一种规范和…

基于51单片机温度报警系统—数码管显示

基于51单片机温度报警系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.DS18B20采集温度&#xff0c;数码管显示温度&#xff1b; 2.温度测量范围&#xff1a;0-99度&#xff1b; 3.当温度低于…

Qt for android 获取USB设备列表(二)JNI方式 获取

简介 基于上篇 [Qt for android 获取USB设备列表&#xff08;一&#xff09;Java方式 获取]&#xff0c; 这篇就纯粹多了&#xff0c; 直接将上篇代码转换成JNI方式即可。即所有的设备连接与上篇一致。 (https://listentome.blog.csdn.net/article/details/139205850) 关键代码…

FPGA实现多路并行dds

目录 基本原理 verilog代码 仿真结果​ 基本原理 多路并行dds&#xff0c;传统DDS的局限性在于输出频率有限。根据奈奎斯特采样定理&#xff0c;单路DDS的输出频率应小于系统时钟频率的一半。但是在很多地方&#xff0c;要使采样率保持一致&#xff0c;所以&#xff0c;为了…

逻辑这回事(一)----FPGA安全编码规范

安全编码的背景、定义 FPGA攻击方式和攻击目的 安全编码价值 2020年4月&#xff0c;来自德国的研究者披露了一个名为“StarBleed”的漏洞&#xff0c;当时引起了业内一片轰动。这种漏洞存在于赛灵思的Virtex、Kintex、Artix、Spartan 等全部7系列FPGA中。通过这个漏洞&#…

【JavaWeb】Day83.Maven高级——分模块设计与开发

分模块设计与开发 介绍 所谓分模块设计&#xff0c;顾名思义指的就是我们在设计一个 Java 项目的时候&#xff0c;将一个 Java 项目拆分成多个模块进行开发。 1). 未分模块设计的问题 如果项目不分模块&#xff0c;也就意味着所有的业务代码是不是都写在这一个 Java 项目当中…

C语言—深入理解指针(4)

1.回调函数 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用&#xff0…