一、注解是什么
- 同
class
和interface
一样,注解也属于一种类型 - 可以理解为一张便标签
二、注解的定义
-
注解通过
@interface
关键字进行定义。public @interface a_Annotation {}
三、注解的应用、以及元注解的作用
-
3.1、
这是没有产生作用的自定义注解。@aAnnotation public class Annotation_Text {}
-
3.2、
怎么产生作用?- 用 元注解 注解自定义注解
四、元注解
4.1、
元注解的定义
- 元注解是一种
基本注解
,但是它能够应用到其它的注解上面。
4.2、
元注解的作用
- 给其他普通的
注解
(标签) 进行解释说明的。
4.3、
元注解的分类
@Retention
-
作用:
应用到一个注解上,解释说明这个注解的的存活时间。 -
取值:
-
RetentionPolicy.SOURCE
:注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视 -
RetentionPolicy.CLASS
: 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中 -
RetentionPolicy.RUNTIME
: 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
-
-
demo:
@Retention (RetentionPolicy.RUNTIME) public @interface aAnnotation {}
-
aAnnotation
可以在程序运行周期被获取到,因此它的生命周期非常的长。
-
@Target
-
作用:
当一个注解被@Target
注解时,这个注解就被限定了运用的场景。比如只能张贴到方法上、类上、方法参数上等等 -
取值:
ElementType.ANNOTATION_TYPE 可以给一个注解进行注解 (·) ElementType.CONSTRUCTOR 可以给构造方法进行注解 ElementType.FIELD 可以给属性进行注解 (·) ElementType.LOCAL_VARIABLE 可以给局部变量进行注解 ElementType.METHOD 可以给方法进行注解 (·) ElementType.PACKAGE 可以给一个包进行注解 ElementType.PARAMETER 可以给一个方法内的参数进行注解 ElementType.TYPE 可给一个类型进行注解,比如类、接口、枚举(·)
Others
- 略
五、注解的属性
- 定义:注解的属性也叫做成员变量;注解只有成员变量,没有方法。
-
定义方式:
"无形参的方法"
-
"方法名"
定义了该成员变量的名字 -
"返回值"
定义了该成员变量的类型 - 无 {}、代码块
-
- 默认值:默认值需要用
default
关键值指定 - 属性类型的范围:类型必须是 8 种基本数据类型外加 类、接口、注解及它们的数组。
-
demo01
有属性默认值注解:@Target(ElemType.TYPE) @Retention(RetentionPolicy.RUNTIME) @interface aAnnotation {int id() default -1; String name();} // 自定义注解的使用 aAnotation {name = "Shonan"} class demo {//...}
六、
Jakarta
现成的注解
@Deprecated
-
作用:
用来标记过时的元素 — IDE 用删除线修饰过时的 staff -
动作:
编译器在编译阶段遇到这个注解时会发出提醒警告
@SuppressWarnings
-
作用
:阻止警告 -
动作:
……
@FunctionalInterface
-
作用
:函数式接口注解- 附:函数式接口
(Functional Interface)
是只具有一个方法的普通接口
- 附:函数式接口
-
动作:
函数式接口可以很容易转换为Lambda
表达式
七、注解的应用场景
- 提供信息给编译器:编译器可以利用注解来探测错误和警告信息
- 编译阶段时的处理:软件工具可以用来利用注解信息来生成代码、Html 文档或者做其它相应处理。
- 运行时的处理:某些注解可以在程序运行的时候接受代码的提取