第十一章 枚举和注解

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、枚举

1. 介绍

1枚举enumeration简写enum

2枚举是一组常量的集合

3枚举属于一种特殊的类里面只包含一组有限的特定的对象

2. 枚举的二种实现方式

1自定义类实现枚举

2使用 enum 关键字实现枚举

3. 自定义类实现枚举

1不需要提供setXxx方法因为枚举对象值通常为只读
2对枚举对象/属性使用 final + static 共同修饰实现底层优化
3枚举对象名通常使用全部大写常量的命名规范
4枚举对象根据需要也可以有多个属性

public class Season {
 
    String name;
    String desc;
 
    // 1.私有化构造器
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
 
    // 3. 直接创建固定对象
    public final static Season SPRING = new Season("春天","温暖");
    public final static Season SUMMER = new Season("夏天","炎热");
}

4. 使用 enum 关键字实现枚举

1使用 enum 关键字开发一个​枚举类​时默认会继承Enum类

2如果使用无参构造器创建枚举对象则实参列表和小括号都可以省略

3枚举对象必须放在枚举类的行首

public enum Season {
 
    SPRING("春天","温暖"),
    SUMMER("夏天","炎热"),
    WHAT;// 使用无参构造器创建枚举对象则实参列表和小括号都可以省略
 
    String name;
    String desc;
 
    private Season() {
    }
 
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
 
}

5. enum常用方法说明

使用关键字 enum 时会隐式继承 Enum类这样我们就可以使用 Enum类 相关的方法。

1toStringEnum类已经重写过了返回的是当前对象名。子类可以重写该方法用于返回对象的属性信息。

2name返回当前对象名常量名子类中不能重写
3ordinal返回当前对象的位置号默认从0开始

4values返回当前枚举类中所有的常量

5valueof:将字符串转换成枚举对象要求字符串必须为已有的常量名否则报异常

6compareTo比较两个枚举常量比较的就是位置号

public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring.toString());
        System.out.println(spring.name());
        System.out.println(spring.ordinal());
 
        Season[] values = Season.values();
 
        Season summer = Season.valueOf("SUMMER");
 
        // spring编号 - summer编号
        int i = spring.compareTo(summer);
}

二、注解

1.  注解的介绍

1注解Annotation也被称为元数据Metadata用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。

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

3在 JavaSE 中注解的使用目的比较简单例如标记过时的功能忽略警告等。在JavaEE 中注解占据了更重要的角色例如用来配置应用程序的任何切面代替javaEE旧版中所遗留的繁冗代码和 XML配置 等。

2. 基本的Annotation介绍

使用Annotation时要在其前面增加@符号并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素

三个基本的Annotation
1@override限定某个方法是重写父类方法该注解只能用于方法
2@Deprecated用于表示某个程序元素类方法等已过时
3@SuppressWarnings抑制编译器警告

补充说明@interface的说明
@interface 不是interface接口是注解类是 jdk1.5 之后加入的。

3. 元注解注解的注解

3.1 元注解的种类

1Retention保留指定注解的作用范围三种SOURCE、CLASS、RUNTIME

2Target目标指定注解可以在哪些地方使用

3Documented指定该注解是否会在javadoc 体现

4Inherited继承子类会继承父类注解

3.2 @Retention注解

只能用于修饰一个注解定义用于指定该注解可以保留多长时间@Rentention 包含一个 RetentionPolicy类型 的成员变量使用 @Rentention 时必须为该 value成员变量 指定值。

@Retention的三种值
1RetentionPolicy.SOURCE编译器使用后直接丢弃这种策略的注解
2RetentionPolicy.CLASS编译器将把注解记录在 class文件 中当运行Java程序时JVM不会保留注解。这是默认值
3RetentionPolicy.RUNTIME编译器将把注解记录在class文件中。当运行Java程序时JVM会保留注解。程序可以通过反射获取该注解。

3.3 @Target 注解

用于修饰注解定义用于指定被修饰的注解能用于修饰哪些程序元素。@Target 也包含一个名为 value 的成员变量。

3.4 @Documented 注解

@Documented用于指定被该元注解修饰的注解类将被 javadoc 工具提取成文档即在生成文档时可以看到该注解。
说明定义为 Documented 的注解必须设置 Retention 值为 RUNTIME。

3.4 @Inherited注解 注解使用较少

被它修饰的注解将具有继承性。如果某个类使用了被@lnherited修饰的注解则其子类将自动具有该注解。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6