java-注解
1 注解
1.1 什么是注解
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制
1.2 注解的作用
Annotation 是一个辅助类,它在 Junit、Struts、Spring 等工具框架中被广泛使用
(1)编译检查
Annotation 具有"让编译器进行编译检查的作用"
(2) 在反射中使用 Annotation
在反射的 Class, Method, Field 等函数中,有许多于 Annotation 相关的接口
(3) 根据 Annotation 生成帮助文档
通过给 Annotation 注解加上 @Documented 标签,能使该 Annotation 标签出现在 javadoc 中
(4) 能够帮忙查看代码
通过 @Override, @Deprecated 等,我们能很方便的了解程序的大致结构
1.3 注解的格式
注解是以“@注释名”在代码中存在的,还可以添加一些参数的值,例如:
@SupperessWarning(value=“unchecked”)
1.4 注解在哪里用
Java 语言中的类、方法、变量、参数和包等都可以被注解标注
2 内置注解
2.1 @Override
定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法的声明,打算重写超类中的另一个方法的声明
@Target(value=METHOD)
@Retention(value=SOURCE)
public @interface Override
表示方法声明旨在覆盖超类型中的方法声明。 如果使用此注释类型注释方法,则除非至少满足以下条件之一,否则需要编译器生成错误消息:
-
该方法将覆盖或实现在超类型中声明的方法。
-
该方法具有与Object中声明的任何公共方法的覆盖相同的签名 。
-
从以下版本开始:
jdk 1.5
2.2 @Deprecated
定义在java.lang.Deprecated,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择
@Documented
@Retention(value=RUNTIME)
@Target(value={CONSTRUCTOR,字段,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER,TYPE})
public @interface 已过时的
注释@Deprecated的程序元素是程序员不鼓励使用的程序元素,通常是因为它是危险的,或者因为存在更好的替代方法。 编译器在不被弃用的代码中使用或覆盖不推荐使用的程序元素时发出警告。
-
从以下版本开始:
1.5
-
See The Java™ Language Specification:
9.6.3.6 @已淘汰
2.3 @SupperssWarnings
定义在java.lang.SupperssWarnings中,用来抑制编译时的警告信息
-
与前两个注解不同,你需要添加一个参数才能正确使用,这些参数都是已经第一好的了,我们选择使用就行
-
@SupperssWarnings(“all”)
-
@SupperssWarnings(“unchecked”)
-
@SupperssWarnings(value = {“unchecked”,“deprecation”})
-
and so on … …
3 元注解
3.1 元注解的作用
负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明
这些类型和它们所支持的类在java.lang.annotation包中可以找到
@Target:用于描述注解的使用范围
@Retention:需要在什么级别保存该注释信息,用于描述注解的声明周期 SOURCE < CLASS < RUNTIME
@Documented:说明该注解将被包含在Javadoc中
@Inherited:说明子类可以继承父类中的该注解
4 自定义注解
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口
- @interface用来声明一个注解,格式public @interface 注解名 {定义内容}
- 每一个方法实际上是声明了一个配置参数
- 方法的名称就是参数的名称
- 返回值类型就是参数的类型(返回值只能是Class、String、enum)
- 可以通过default来声明参数的默认值
- 如果只有一个参数成员,一般参数名为value
- 注解元素必须要有值,定义注解元素时,经常使用空字符串,0作为默认值
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author:zhangsann__6
* @Description:
* @date:2021/8/17 22:46
*/
public class Test03 {
@MyAnnotation02(name = "可怜小张", id = 10086)
public static void main(String[] args) {
}
}
@SuppressWarnings("all")
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation02{
//注解参数格式
//参数类型 + 参数名();
//参数类型 + 参数名() default xx;
String name();
int id() default 0;
}