1、四大内置注解
(1)@Override
注解用于标识方法重写,例如当前类中重写tostring()方法
(2)@Deprecated
注解用于标识方法已过时
(3)@SuppressWarings
注解用于抑制编译器警告,直白的讲就是消除Eclipse上那
条黄色警告线,但编译器里关于这条警告的信息还在。
(4)@SafeVarargs
抑制堆污染警告(单独警告),直白的讲就是使用泛型和
可变参数搭配使用将会产生的编译器警告,可以使用@SuppressWarnings消除警告,后来在Java7引入了新的
注解,就是@SafeVarargs,如果开发人员确信某个使用了
可变参数的方法,在与泛型类一起使用时不会出现类型
安全问题,就可以用这个注解进行声明,这样编译器就不会报警告。
2、四大元注解
元注解的作用就是用于定义其他注解,是由JAVA为我们提供的,
不能更改,从JAVA5.0开始一共为我们提供了四个元注解。
(1)@Target
@Target作用
用于描述注解的使用范围,也就是说使用了@Target
去定义一个注解,那么可以决定定义好的注解能用在什么地方
@Target取值
@Target的取值使用ElementType,ElementType的相关说明
可以通过JDK文档查询,也可以直接查看其源码
- CONSTRUCTOR:用于描述构造器
- FIELD:用于描述域
- LOCAL_VARIABLE:用于描述局部变量
- METHOD:用于描述方法
- PACKAGE:用于描述包
- PARAMETER:用于描述参数
- TYPE:用于描述类、接口(包括注解类型) 或enum声明
(2)@Retention
@Retention作用
用于描述注解的生命周期,也就是说这个注解在什么范围内有效,注解的生命周期和三个阶段有关:源代码阶段、CLASS文件中有效、运行时有效,故其取值也就三个值,分别代表着三个阶段
@Retention取值
@Retention的取值适用RetentionPoicy,RetentionPoicy的相关说明可以通过JDK文档查询,也可以通过查看源码
- SOURCE:在源文件中有效(即源文件保留)
- CLASS:在class文件中有效(即class保留)
- RUNTIME:在运行时有效(即运行时保留)
(3)@Documented
@Documented作用
使用@Documented定义后的注解,在该注解使用后,如果导出API文档,会将该注解相关的信息可以被例如javadoc此类的工具文档化。
Documented是一个标记注解,没有成员。
(4)@Inherited
@Inherited作用
使用@Inherited定义的注解具备继承性
假设一个注解在定义时,使用了@Inherited,然后该注解在一个类上使用,如果这个类有子类,那么通过反射我们可以从类的子类上获取到同样的注解
3、自定义注解
//@Target:标记一个注解,可以标记代码什么位置
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)//标记一个注解的生命周期
@Documented//标记一个注解,是否可以生成到API文档
@Inherited//标记一个注解是否能被继承,标记了,就可以子类中继承到
public @interface Vip {
int a() default 0;
}