3.2 Java之枚举与注解

枚举

这里写图片描述

  • 补:相当于让每个对象重写抽象方法
  • 枚举类的对象有限,通过关键字限制构造器
  • 单例模式看作特殊的枚举类,只提供一个实例

自定义枚举类(1.5之前)

这里写图片描述
这里写图片描述

  • 构造器私有,保证对象的有限性,保持封装性和不可更改性,属性私有和final
  • 在内部创建对象(构造器私有),对象个数确定
  • 对象是全局常量,通过构造器属性赋值后,final关键字使得属性不可更改
  • 单例模式创建好对象后,通过公共方法调用,而枚举类直接通过类来调用对象,一旦通过声明调用对象,则拒绝修改
  • Season类型常量,要大写
  • 枚举类对象为全局常量,只能调用,拒绝修改

使用enum关键字定义枚举类

这里写图片描述

这里写图片描述

  • 修改方式
    1. 将枚举类对象置于最前面,格式同最上方
    2. 省略修饰符(默认,同接口修饰符)
      3.分号变逗号
    3. 其他同上

枚举类实例

Thread的内部类State是枚举类,只有六个对象,本质还是对象,但没有属性而已,例如上文的name
这里写图片描述

  • 该类表示线程的生命周期

枚举类的方法

这里写图片描述

  • values()方法返回枚举类的所有对象,以数组形式返回
  • valueof()方法传入枚举类的对象名(字符串类型),返回对应的枚举类对象,
  • 形参是类型的声明(SPRING而不是spring,Java区分大小写的)
  • 若输入非枚举类对象名,否则报错,而不是null

实现接口的枚举类

正常用法

同接口章节,当做普通类

特殊用法

分别让对象实现接口的方法
这里写图片描述

  • 红色波浪线是由于枚举类的对象未全部重写完接口方法
  • 注意写法,枚举类对象的逗号前加{},然后重写方法

测试类

这里写图片描述
这里写图片描述
输出结果
这里写图片描述


注解

源文件的补充信息,不同于注释(单行,多行,文档注释)

基本的注解类型

这里写图片描述
各自的特定功能:
1. 表覆盖,显式表明重写父类方法
2. 表过时,当下可用,但要及时修改
3. 强迫症的福音,不让警告,添加语句(括号内可放置多个属性)

  • rawtypes:未使用泛型
  • unused:变量未使用

自定义注解

注解内部可添加成员变量
这里写图片描述

  • 格式奇怪,看成String类型数组的一个属性(注解的成员变量属性用数组表示),只不过属性处添加了小括号

创建自定义注解

以下实例属性不使用数组,使用一个变量,添加属性默认值hello(非数组,只能书写一个属性)
这里写图片描述

自定义注解使用

这里写图片描述

元注解

  1. 修饰注解的注解

  2. String name = “OK”

    • 声明一个变量,OK是本身变量的实体内容
    • 数据本身是个实体的内容,修饰变量的实体内容的称为元数据,如String(数据类型)和name(数据名)

Retention

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

    • RetentionPolicy.SOURCE: 编译器直接丢弃这种注释
    • RetentionPolicy.CLASS: 编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解。 这是默认值
    • RetentionPolicy.RUNTIME:编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注释. 程序可以通过反射获取该注释

总结:

  • Retention的成员变量可取的三个值是通过枚举类来表示,表示三种状态,
    表明被注解的注解的生命周期

  • 编译时被抛弃,即不考虑了

  • 编译时保存在class文件中,运行时不保留(默认状态)
  • 编译,运行皆保留,可通过反射获取该注解,即该注解(非元注解)属于类的一部分,可获取

Target

  • @Target: 用于修饰 Annotation 定义, 用于指定被修饰的 Annotation 能用于修饰哪些程序元素,即指明注解能修饰的结构
  • @Target 也包含一个名为 value 的成员变量

这里写图片描述
type包括class,接口,枚举类

Documented

@Documented: 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档.
定义为Documented的注解必须设置Retention值为RUNTIME。

猜你喜欢

转载自blog.csdn.net/lwz45698752/article/details/81449330
3.2