注解也是一种引用数据类型,在程序中相当于一种标记。
如果要对于注解的作用进行分类,我们可以根据它所起的作用,大致可分为三类:
编写文档:通过代码里标识的元数据生成文档。
代码分析:通过代码里标识的元数据对代码进行分析。
编译检查:通过代码里标识的元数据让编译器能实现基本的编译检查。

注解类别

基本内置注解

@Override

@Override:只能注解方法,用来声明被注解的方法是用来重写父类的方法的,如果被注解的方法没有重写父类的方法,那么编译器就会报错。

@Deprecated

@Deprecated:向编程人员告知某个类或方法已经过时了。

@SuppressWarnings

@SuppressWarnings 与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数值都是已经定义好
了的,我们选择性的使用就好了,参数如下:
deprecation 使用了过时的类或方法时的警告
unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定
集合保存的类型
fallthrough 当 Switch 程序块直接通往下一种情况而没有 Break 时的警告
path 在类路径、源文件路径等中有不存在的路径时的警告
serial 当在可序列化的类上缺少 serialVersionUID 定义时的警告
finally 任何 finally 子句不能正常完成时的警告
all 关于以上所有情况的警告

元注解

元注解:注解的注解,即用来标注“注解类型”的注解

@Target

用来标注“被标注的注解”可以出现的位置
属性值是一个ElementType 枚举

  1. package java.lang.annotation;
  2. public enum ElementType {
  3. TYPE,/** Class, interface (including annotation type), or enum
  4. declaration */
  5. FIELD,/** Field declaration (includes enum constants) */
  6. METHOD,/** Method declaration */
  7. PARAMETER,/** Parameter declaration */
  8. CONSTRUCTOR,/** Constructor declaration */
  9. LOCAL_VARIABLE,/** Local variable declaration */
  10. ANNOTATION_TYPE,/** Annotation type declaration */
  11. PACKAGE /** Package declaration */
  12. }

METHOD:出现在方法上
PARAMETER:参数
CONSTRUCTOR:构造方法
LOCAL_VARIABLE:局部变量
PACKAGE:包
TYPE:类型,包括:类,接口,枚举
FIELD:属性
ANNOTATION_TYPE:注解

@Retention

用来标注“被标注的注解”最终保存在哪,属性值是一个RetentionPolicy枚举
SOURCE:被标注的注解只能保存在Java源文件中
CLASS:被标注的注解保存在class文件中
RUNTIME:被标注的注解保存在class文件中,且可以被反射机制读取

@Documented

Java 提供的Documented 元注释跟 Javadoc 的作用是差不多的,其实它存在的好处是开发人员可以定制 Javadoc 不
支持的文档属性,如果要使用@Documented 元注释,就得为该注释设置 RetentionPolicy.RUNTIME 保持性策略。

  1. @Documented
  2. @Retention(RetentionPolicy.RUNTIME)

@Inherited

标注继承,它的作用是控制注释是否会影响到子类

自定义注解

创建注解语法格式:

  1. [修饰符列表] @interface 注解名 {
  2. 注解代码块;
  3. }

添加变量/属性

参数的类型只能是:基本数据类型,String,枚举类型,Class,以及这些类型对应的数组类型
如果定义的注解有属性,在使用该注解时,也要写上对应的属性,且要给属性赋值
如果属性是value,并且只有这一个属性,则在使用该注解时,“value=”可以省略不写
如果已经为属性指定了默认值defalut,则使用该注解时,已赋了默认值的属性可以不用再赋值了。
如果属性是数组,且数组中的元素只有一个,则使用该注解时,给数组属性赋值时大括号{ } 可以省略不写。