Chapter11_枚举和注解
侧边栏壁纸
  • 累计撰写 53 篇文章
  • 累计收到 5 条评论

Chapter11_枚举和注解

bbchen
2023-02-26 / 0 评论 / 30 阅读 / 正在检测是否收录...

枚举和注解

本章内容

image-20221005182405272

枚举(enumeration, 简写enum)

枚举是一组常量的集合,属于一种特殊的类,里面只包含一组有限的特定的对象

实现方式:

  1. 自定义枚举类型
package com.bbchen.enum_;

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

// 演示自定义枚举实现
class Season {
    private String name;
    private String desc;

    public final static Season SPRING = new Season("春天", "温暖");
    public final static Season SUMMER = new Season("夏天", "炎热");
    public final static Season AUTUMN = new Season("秋天", "凉爽");
    public final static Season WINTER = new Season("冬天", "寒冷");

    // 1.构造器私有化,防止直接 new
    // 2.去掉 setter 方法,防止属性被修改
    // 3.在 Season 内部,直接创建固定的对象
    // 4.final static
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}
  1. 使用 enum关键字 来实现
package com.bbchen.enum_;

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

// 演示 enum关键字 枚举实现
enum Season2 {


//    public final static Season2 SPRING = new Season2("春天", "温暖");
//    public final static Season2 SUMMER = new Season2("夏天", "炎热");
//    public final static Season2 AUTUMN = new Season2("秋天", "凉爽");
//    public final static Season2 WINTER = new Season2("冬天", "寒冷");

    // 如果使用 enum 来实现枚举类
    // 1.使用 enum 替代 class
    // 2.使用 SPRING("春天", "温暖"); 代替
    //   public final static Season2 SPRING = new Season2("春天", "温暖");
    // 3.如果有多个对象常量,使用 ,号间隔即可
    // 4.要求将定义常量写在前面
    SPRING("春天", "温暖"),
    SUMMER("夏天","炎热"),
    AUTUMN("秋天", "凉爽"),
    WINTER("冬天", "寒冷");
    private String name;
    private String desc;

    private Season2(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

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

注意事项

  1. 当我们使用 enum关键字 来开发一个枚举类时,默认会继承 Enum 类,而且是一个 final 类,使用 javap 来证明

    image-20221005185821066

  2. 使用 SPRING("春天", "温暖"); 代替 public final static Season2 SPRING = new Season2("春天", "温暖");
  3. 无参构造器创建常量对象,则省略可以不写括号()
  4. 当有多个枚举对象是,使用逗号间隔,最后一个以分号结尾
  5. 枚举对象必须放在枚举类的最前面

练习

image-20221005192052752

Enum 成员方法

package com.bbchen.enum_;


/**
 * 演示 Enum 类的各种方法,使用 Season2 演示
 */
public class EnumMethod {
    public static void main(String[] args) {
        Season2 autumn = Season2.AUTUMN;

        // name() 输出枚举对象的名字
        System.out.println(autumn.name());

        // ordinal() 输出该枚举对象的次序/编号,从0开始
        System.out.println(autumn.ordinal());

        // values() 返回 Season2[], 含有定义的所有枚举
        Season2[] values = Season2.values();
        for (Season2 season: values) {
            System.out.println(season);
        }

        // valueOf() 将字符串转换成枚举对象,要求字符串必须为已有常量名
        // 1.根据输入的 "AUTUMN" 到 Season2 的枚举对象去查找
        // 2.如果找到,就返回该对象,如果没有则报错
        System.out.println("autumn1 = " + Season2.valueOf("AUTUMN"));

        // compareTo() 将枚举对象的编号进行比较
        // self.ordinal - other.ordinal
        // 调用元素编号 - 比较元素编号
        System.out.println(Season2.AUTUMN.compareTo(Season2.SPRING));
    }
}

练习

image-20221005194752752

package com.bbchen.enum_;

public class EnumExercise02 {
    public static void main(String[] args) {
        Week[] weeks = Week.values();

        System.out.println("===所有星期的信息如下===");
        for (Week week: weeks) {
            System.out.println(week);
        }
    }
}

enum Week {
    MONDAY("星期一"),
    TUESDAY("星期二"),
    WEDNESDAY("星期三"),
    THURSDAY("星期四"),
    FRIDAY("星期五"),
    SATURDAY("星期六"),
    SUNDAY("星期日");

    private final String name;

    Week(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

enum 实现接口

  1. 使用 enum 关键字后,就不能在继承其他类了,因为 enum 会隐式继承 Enum,而 Java 是单继承制
  2. enum 实现的枚举类,仍然是一个类,所以还是可以实现接口的

注解 (Annotation,了解即可)

  1. 注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。
  2. 和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
  3. 在 JavaSE 中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替 javaEE 旧版中所遗留的繁冗代码和 XML 配置等。

Annotation

三个基本的 Annotation:

  1. @Override: 限定某个方法,是重写父类方法,该注解只能用于方法
  2. @Deprecated: 用于表示某个程序元素(类,方法等)已经过时,即不再推荐使用,但是仍然可以使用
  3. @SuppressWarnings: 抑制编译器警告

image-20221005205544410

image-20221005205702712

image-20221005210700073

元注解

image-20221005211013988

image-20221005211438151

image-20221005211620022

image-20221005211829797

0

评论

博主关闭了所有页面的评论