Java基础-学习笔记11

11 枚举、注解

枚举

枚举是一组常量的集合。
可以这么理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象。比如,Season类,只包含SPRING、SUMMER、AUTUMN、WINTER四个对象常量。
两种实现方式

(1)自定义类实现枚举

      1) 构造器私有化
      2) 本类内部创建一组对象 [四个 春夏秋冬]
      3) 对外暴露对象(通过为对象添加 public final static 修饰符)
      4) 可以提供 get方法,但不要提供 set

//main:
System.out.println(Season.AUTUMN.getName());
System.out.println(Season.SPRING.getDesrip());

class Season
{
    private String name;
    private String desrip;
    private Season(String name, String desrip)
    {
        this.name = name;
        this.desrip = desrip;
    }

    public static final Season SPRING = new Season("Spring", "warm");
    public static final Season SUMMER = new Season("Summer", "hot");
    public static final Season AUTUMN = new Season("Autumn", "cool");
    public static final Season WINTER = new Season("Winter", "cold");

    public String getName()
    {
        return name;
    }

    public String getDesrip()
    {
        return desrip;
    }
}

(2)enum 关键字实现枚举

  1. 使用 enum 代替 class
  2. 使用 enum 来实现枚举,要求将定义的常量对象写在前面
  3. 如果有多个常量对象,用,(逗号)间隔即可,最后用;(分号)结尾
  4. 直接使用 常量名(构造器实参列表) 就可创建常量对象
  5. 如果使用的是无参构造器创建常量对象,则可以忽略小括号和实参列表
  6. 当我们使用 enum 来实现枚举时,默认会继承 Enum类(可通过 javap 反编译查看)
//main:
System.out.println(Season.AUTUMN.getName());
System.out.println(Season.SPRING.getDesrip());

enum Season
{
    SPRING("Spring", "warm"),SUMMER("Summer", "warm"),AUTUMN("Autumn", "cool"),WINTER("Winter", "cold");
    private String name;
    private String desrip;
    private Season(String name, String desrip)
    {
        this.name = name;
        this.desrip = desrip;
    }

    public String getName()
    {
        return name;
    }

    public String getDesrip()
    {
        return desrip;
    }
}

enum 常用方法

枚举类.valueOf(名称): 返回名称对应的枚举对象,如果不存在就会报错
枚举实例.ordinal(): 返回枚举实例对应的索引号,默认从0开始
枚举类.values(): 返回当前枚举类中所有常量形成的列表
枚举实例1.compareTo(枚举实例2): 比较两个枚举常量,比较的是位置号,返回实例1的位置号-实例2的位置号

enum 使用细节

  1. enum 类已经隐式继承了 Enum 类了,所以不能再继承其他类了。
  2. enum 类和普通类一样,可以实现接口

枚举类实现switch

  1. switch()中,放入枚举对象
  2. 在每个 case 后,直接写上在枚举类中定义的枚举对象即可
COLOR green = COLOR.GREEN;
        switch(green)
        {
            case BLUE:
                System.out.println("BLUE");
                break;
            case RED:
                System.out.println("RED");
                break;
            default:
                System.out.println("no match...");
        }

注解

1)注解(annotation)也被称为元数据(metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。
2) 相当于嵌入再代码中的补充信息。
3) 在 JavaSE,注解的使用目的比较简单,例如标记过时内容(@Deprrcated)、限定重写方法(@Override)、抑制编译器警告(@SuppressWarning); 在JaveEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。
4) @Target是修饰注解的注解,是元注解。
5) 写注解的价值在于,编译会自动进行语法校验。比如说,如果写了@Override注解,编译器就会去检查该方法是否真的重写了父类的方法,如果的确构成重写,则编译通过。否则编译错误。

元注解 (了解即可)

 // 元注解的种类:
 1)Retention  // 指定注解的作用范围(时间),三种:
 // SOURCE(编译器使用后直接丢弃这种策略的注解)
 // CLASS (注解记录保留在class文件中,运行Java程序时,JVM不会保留注解)
 // RUNTIME(注解记录保留在class文件中,运行时JVM会保留注解,程序可以通过反射获取该注解)
 2)Target  // 指定注解可以在那些地方使用,取值包括 类、方法、构造器...
 3)Documented  // 指定该注解是否在javadoc中体现
 4)Inherited  // 子类会自动继承父类的注解
posted @ 2024-08-14 11:41  JuneFall  阅读(3)  评论(0编辑  收藏  举报