学习枚举类与注解整理的学习笔记
一、枚举类
1.1 说明
- 类的对象只有有限个,确定的。称这种类为枚举类
- 当需要定义一组常量时,强烈建议使用枚举类
1.2 枚举类定义
- 方式一:JDK5.0之前,自定义枚举类
- 1.定义类的属性:用private final 来修饰
- 2.构造器私有化,并带参对类的属性进行赋值
- 3.创建对象(public static final)
- 4.(可选)提供类的属性get方法,以及重写toString方法
1 | class Season{ |
- 方式二:JDK5.0之后,使用enum创建枚举类
- 1.提供当前枚举类的对象,多个对象用“,”隔开,末尾用“;”结束
- 2.声明Season对象的属性:private、final修饰
- 3.私有化类的构造器,并对属性进行赋值
- 4.(可选)获取枚举类的属性,提供toString方法
- 注意:enum继承的父类并不是Object类,而是java.lang.Enum类
1 | //使用enum创建枚举类 |
1.3 Enum类的常用方法
- 1.values()方法:返回枚举类的对象数组,该方法可以很方便地遍历所有的枚举类
1 | //values() |
- 2.valueOf(String objName):可以把一个字符串转为对应的枚举类对象,要求字符串必须是枚举类对象
1 | //valueOf(String objName) |
- 3.toString():返回当前枚举类对象常量的名称
1.4 使用enum关键字定义的枚举类实现接口的情况
- 1.情况一:实现接口,在enum类中实现抽象方法(普通方法)
- 2.情况二:让枚举类对象分别实现接口中的抽象方法,在对象后面加上{},在里面重写抽象方法
1 | SPRING("春天", "春暖花开"){ |
二、注解
2.1 注解(Annotation)理解
- (1)这是JDK5.0新增的功能
- (2)Annotation其实是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息
- (3)在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。
2.2 Annotation使用示例
- 示例一:
- 生成文档相关的注解
1 | ","来进行分割 标明开发各类莫尅的作者,多个作者使用 |
1 | 其中: |
- 示例二:
- 在编译时进行格式检查(JDK内置的三个基本注解)
1 | :限定重写父类方法,该注解只能用于方法 |
2.3 元注解
- 理解:
- JDK提供四种元注解,用来修饰其他Annotation
- (1)Retention: 指定所修饰的注解的生命周期
- 格式:
@Retention(RetentionPolicy.xxx)
- 三种状态:
- SOURCE:通过javac编译后的class文件就不存在次注解
- CLASS(默认):编译后注解还在,但通过java运行时,该注解不会被加载
- RUNTIME:运行时注解会被加载
- 注意:只有声明为RUNTIME生命周期的注解,才能通过反射获取
- 格式:
- (2)Target: 用于指定被修饰的注解,能用于修饰那些程序元素
- 格式:
@Target({xxx, xxx, xxx,......})
- 属性:
- TYPE:表示类、接口、枚举类
- FIELD:field属性
- METHOD:方法
- PARAMETER:属性
- CONSTRUCTOR:构造器
- LOCAL_VARIABLE:局部变量
- ANNOTATION_TYPE:注解类型
- PACKAGE:包
- 格式:
- (3)Documented: 被此元注解修饰的注解会被javadoc工具提取成文档。默认情况下,javadoc是不包括注解的
- 注意:定义为Documented的注解必须设置Retention值为RUNTIME
- (4)Inherited: 被修饰的注解将具有继承性
2.4 自定义注释(实用度不高)
- 参照@SuppressWarnings来定义
- (1)注解声明为@interface
- (2)内部定义成员,通常用value表示
- (3)可以指定成员的默认值,使用default定义
- (4)如果自定义注解没有成员,表明只是个标识
- 如果注解有成员,在使用注解时,需要指明成员的值
- 自定义注解必须配上注解的信息流程(使用反射)才有意义
- 自定义注解一般会指明两个元注解:Retention 和 Target
1 | MyAnnotion{ |