七:java枚举和注解

61 阅读2分钟

枚举类

枚举是一种特殊的类,里面只包含特定的对象

自定义类枚举

  1. 不提供set方法,因为枚举值只读
  2. 对枚举的属性使用final + static共同修饰,实现底层优化(不加载类,可以通过类名访问)

代码示范:

class Season {
    private final String name;
    private final String desc;

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

    // 构造器私有化,防止外部直接new
    private Season(String name, String desc) {
        this.desc = desc;
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }
}

System.out.println(Season.SPRING);

关键字枚举

enum Season2 {

    SPRING("春天", "温暖"),
    SUMMER("夏天", "炎热"),
    AUTUMN("秋天", "凉爽"),
    WINNER("冬天", "寒冷");

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

}
常用枚举方法
  1. toString:返回对象类名,子类可以重写该方法
  2. name:返回当前对象(常量名,不可重写)
  3. ordanal:返回当前对象的位置号,从0开始
  4. values:返回当前枚举中所有常量,返回的是一个数组
  5. valueOf:将字符串转化为枚举常量,要求字符串必须为已有的常量名,否则报异常(其实相当于查找某个常量)
  6. compareTo:对比两个枚举常量
使用enum实现接口

使用enum关键字后,就不能再继承其他类了,因为enum隐式继承了Enuum类。

enum类可以实现接口,代码示范

interface Test {
    public void study();
}

enum Study implements Test {
    STUDY,STUDY2;
    public void study() {
        System.out.println("study...");
    }
}

注解

注解(Annotation),也被称为元数据,用于修饰包,类,方法,属性,构造器,局部变量等数据。

和注释一下,不影响程序逻辑,但注解可以被编译或者运行,相当于嵌入在代码中的补充信息。

注解有三种

  1. @Override:限定用在子类的方法中,且这个方法在父类必须存在(父类不存在此方法将报错),表示重写父类方法。
  2. @Deprecated:用于表示某个程序元素(类,方法等)已过时。只是告诉用户和编译器这个方法已经过时了,不代表不能用。可以修饰,方法,类,属性,包,参数等。通常用于版本升级过度。
  3. @SuppressWarnings:抑制编译警告。类似于js当中disable-next-line。可以修饰类, 方法,属性等

代码示范:

@Deprecated
class Test {

}