• 第十一章 枚举和注解


    一.枚举

    1. 枚举对应英文(enumeration,简写enum)
    2. 枚举是一组常量的集合。
    3. 可以这里理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象。

    1. 枚举的两种实现方式

    1. 自定义类实现枚举
    2. 使用enum关键字实现枚举
    (1)自定义类实现枚举
    1. 不需要提供setXXX方法,因为枚举对象值通常为只读
    2. 对枚举对象/属性使用final+static共同修饰,使其不能再重新赋值
    3. 枚举对象名通常使用全部大写,常量的命名规范
    4. 枚举对象根据需要,也可以有多个属性/Enumeration02java
    public class Enumeration {
        private String name;
        private String desc;
        //1.构造器私有化
        private Enumeration(String name, String desc) {
            this.name = name;
            this.desc = desc;
        }
        //2.创建一组对象
        public static final Enumeration SUMMER = new Enumeration("夏天","热");
        public static final Enumeration SPRING = new Enumeration("春天","温暖");
        public static final Enumeration AUTUMN = new Enumeration("秋天","凉爽");
        public static final Enumeration WINTER = new Enumeration("冬天","寒冷");
        public static int count = 0;
        static {
            //以此证明类加载一次
            count++;
            System.out.println("count"+count);
        }
    
    }
    class T2{
        public static void main(String[] args) {
            Enumeration autumn = Enumeration.AUTUMN;
            Enumeration spring = Enumeration.SPRING;
            Enumeration summer = Enumeration.SUMMER;
            Enumeration winter = Enumeration.WINTER;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    小结:进行自定义类实现枚举,有如下特点:
    1. 构造器私有化
    2. 本类内部创建一组对象
    3. 对外暴露对象(通过为对象添加public final static修饰符)
    4. 可以提供get方法,但是不要提供set
    (2)enum关键字实现枚举
    1. 当我们使用enum关键字开发一个枚举类时,默认会继承Enum类[如何证明]通过反编译
    2. 传统的public static final Season2 SPRING=new Season2(“春天”,“温暖”):简化成SPRING("春天”,“温暖”),这里必须知道,它调用的是哪个构造器.
    3. 如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略
    4. 当有多个枚举对象时,使用,间隔,最后有一个分号结尾
    5. 枚举对象必须放在枚举类的行首.
      举例
    public class Enumeration02 {
        public static void main(String[] args) {
            System.out.println(Season.SPRING);
        }
    }
    //1.使用关键字enum替代class
    //2.public static final Season SPRING = new Enumeration("春天","温暖"); 等价于  SPRING("春天","温暖")
    //Season.SPRING = Season.AUTUMN;会报错测试出是由public static final修饰的
    enum Season{
        //3.如果有多个常量(对象)使用,使用,间隔
        //4.如果使用enum来实现枚举,要求将定义常量对象,写在前面
        //5.如果我们使用的是无参构造器,则实参列表和小括号可以省略
        // S相等于 public static final Season = new S();
        S,SPRING("春天","温暖"),SUMMER("夏天","炎热"),AUTUMN("秋天","凉爽"),WINTER("冬天","寒冷");
        private String name;
        private String desc;
        private Season(){
    
        }
       private Season(String name, String desc) {
            this.name = name;
            this.desc = desc;
        }
        static {
            System.out.println("测试使用枚举类中对象类是否会被加载");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    javap 类名.class反编译之后的结构
    在这里插入图片描述

    1.enum常用方法说明

    说明:使用关键字enum时,会隐式继承Enum类,这样我们就可以使用Enum类相关的方法。[看下源码定义]
    public abstract class Enumimplements Comparable,Serializable

    1. toString:Enum类已经重写过了,返回的是当前对象名,子类可以重写该方法,用于返回对象的属性信息
    2. name:返回当前对象名(常量名),子类中不能重写
    3. ordinal:返回当前对象的位置号,默认从0开始
    4. values:返回当前枚举类中所有的常量
    5. valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!
    6. compareTo:比较两个枚举常量,比较的就是编号!可以点击去查看源码
    2.enum实现细节
    1. 使用enum关键字后,就不能再继承其它类了,因为enum会隐式继承Enum,而java是单继承机制。
    2. 枚举类和普通类一样,可以实现接口,如下形式。
      enum类名implements接口1,接口2{}
    3. 课堂练习
      在这里插入图片描述
      在这里插入图片描述
      答案:BOY T
      在这里插入图片描述
  • 相关阅读:
    网络安全红队详细接收
    自动化测试常见的三大问题及解决方案
    React_lazy使用-组件加载前loading做优雅降级
    Python基础入门例程8-NP8 为整数增加小数点
    ruby基础-安装和命令行
    微信小程序发布一个npm包
    电子邮件营销初学者指南(三):8个成功策略
    记账心得分享
    模拟电路(详细版)--放大电路的频率效应(RC电路)
    Docker 01 概述
  • 原文地址:https://blog.csdn.net/wyr1235/article/details/127793413