注解是jdk1.5引入的一种新特性,是一种对Java类、方法、属性等的注释机制。
Java本身自有的注解有10种,分别为java.lang包中的5个:@Override、@Deprecated、@SuppressWarnings、@SafeVarargs、@FunctionalInterface;以及java.lang.annotation包中的另外5个:@Retention、@Documented、@Target、@Inherited、@Repeatable。
我们也可以根据自己的需求编写自定义注解。
二、注解结构1个注解可以绑定多个ElementType和1个RetentionPolicy。
ElementType和RetentionPolicy都是枚举类型的,其中ElementType包含10种类型属性:TYPE、FIELD、METHOD、PARAMETER、CONSTRUCTOR、LOCAL_VARIABLE、ANNOTATION_TYPE、PACKAGE、TYPE_PARAMETER、TYPE_USE,用来指定注解适用的对象类型;而RetentionPolicy包含3种作用域类型:SOURCE、CLASS、RUNTIME,用于指定注解的作用域。
我们使用@Target注解给注解指定ElementType类型,使用@Retention注解给注解指定RetentionPolicy作用域。当没有@Target时,注解默认适用于全部的ElementType类型,@Retention有且必须只有1个。
注解一般语法结构:
3.1 @interface
此注解用于对注解进行定义,在定义注解时它是必须的,使用时置于注解名的前面。
3.2 @Target
此注解用于指定注解适用的对象类型,使用时置于注解上,是注解的注解。
3.3 @Retention
此注解用于指定注解的作用域,使用时置于注解上,是注解的注解。
3.4 @Documented
此注解用于将注解进行javadoc文档化,使用时置于注解上,也是注解的注解。
3.4 @Inherited
此注解标注在注解上,用于使注解具有继承性。
3.4 @Override
此注解标注在方法上,表示该方法对父类中的方法进行重写。
3.4 @SuppressWarnings
此注解可标注于TYPE、FIELD、METHOD、PARAMETER、CONSTRUCTOR、LOCAL_VARIABLE6种类型的作用对象上,当所标注内容产生警告时,编译器会对这些警告进行忽略。
3.4 @Deprecated
此注解可标注于TYPE、FIELD、METHOD、PARAMETER、CONSTRUCTOR、LOCAL_VARIABLE、PACKAGE7种类型的作用对象上,被标注的对象将不再建议被使用。
value属性:
通过value我们可以为注解指定参数。比如:@SuppressWarnings(value={"unchecked"})表示忽略未经检查的警告。
除了value属性,也可以设置其他属性,JDK1.8以后必须为属性设置初始值,任何类型的属性均不允许赋值为null,空字符串可以写""。