• 说明
    • 注解以@打头
    • 注解作为一个标记,传递某种信息
    • 一个注解就是一个类
    • 哪里用到注解,就会在哪创建注解实例对象
    • javac编译器或其他程序通过反射获取元素的注解
  • 分类
    • JDK内置系统注解
      • @Deprecated
        • 标记某个元素过时
      • @Override
        • 标记某个方法覆盖了父类方法
      • @SafeVarargs
        参考http://book.51cto.com/art/201205/339154.htm
        • 抑制编译器警告
        • 此注解只能用在参数长度可变的方法或构造方法上
        • 且方法必须声明为static或final,否则会出现编译错误
      • @SuppressWarnings
        • 提示编译器不要提示警告
    • 元注解
      • @Documented
        • 说明
          • Documented 注解表明这个注解应该被 javadoc工具记录
            默认情况下,javadoc是不包括注解的
          •  如果声明注解时指定了@Documented,则它会被 javadoc 之类的工具处理
            • 声明了此元注解的注解在使用时,会被保留在Doc文档中
              Java注解(Annotation)

               @Test_Retention (doTestRetention="保留注解信息测试")
                 public void doSomeTestRetention() {
                    System.out.printf("测试注解类型 'Retention'");
                 }
                @Test_Documented(doTestDocument="Hello document")
                 public void doSomeTestDocumented() {
                    System.out.printf("测试注解类型 'Documented'");
                 }
      • @Inherited
        • 说明
          • 此注解用来标注自定义注解
          • 此注解起到的作用:允许一个子类继承其父类上的某自定义注解
            • 某自定义注解上标注有@Inherited
          • 继承有效情况
            • 从某个子类上获取注解
            • 某个子类不覆盖父类加了注解的成员
              • 在子类中能获取到被继承成员上的注解
          • 继承无效情况
            • 子类覆盖了父类加了注解的成员
              • 在子类中获取不到成员上的注解
          • 示例
            http://blog.csdn.net/snow_crazy/article/details/39381695
      • @Retention
        • 说明
          • 标记注解存在的生命周期
            • Java源文件
            • class文件
            • 内存中的字节码
          • 默认值在class文件阶段
          • 取值枚举RetentionPolicy
        • 取值
          • CLASS
            • 这种类型的Annotations编译时被保留
              在class文件中存在,但JVM将会忽略
          • RUNTIME
            • 这种类型的Annotations将被JVM保留
              所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用
          • SOURCE
            •  这种类型的Annotations只在源代码级别保留
              编译时就会被忽略
      • @Target
        • 说明
          • 用于说明当前注解要作用在哪个元素上
          • 取值枚举ElementType
        • 取值
          • ANNOTATION_TYPE :注解类型声明
          • CONSTRUCTOR :构造方法声明
          • FIELD :字段声明(包括枚举常量)
          • LOCAL_VARIABLE :局部变量声明
          • METHOD :方法声明
          • PACKAGE :包声明
          • PARAMETER :参数声明
          • TYPE :类、接口(包括注解类型) 或enum声明
    • 自定义注解
      • 说明
        • 注解之所以强大,因为它有属性
        • 注解和接口很类似
        • 使用注解时,()里有{}
          • 注解的属性是数组类型
        • 使用注解时,省略了"属性名="
          • 注解只有一个属性
          • 属性名为value
      • 声明
        • public @interface注解名字
      • 属性
        • 声明
          • 返回类型 属性名();
          • 返回类型 属性名() default xxx;
        • 返回类型
          • 所有基本数据类型(int,float,boolean,byte,double,char,long,short)
          • String类型
          • Class类型
          • enum类型
          • Annotation类型
          • 以上所有类型的一维数组
            • 数组元素个数=1
              • 使用时,{}可省略
            • 数组元素个数>1
              • 使用时,{}不可省略
        • 属性名
          • value
            • 当注解只有value一个属性时
              • 使用时,"value="可省略
            • 当注解有多个属性时
              • 除value属性,其他属性都有default
                • YES
                  • 使用时,"value="可省略
                • NO
                  • 使用时,"value="不可省略
          • 其他合法属性名
            • 使用时,属性名=属性类型的值
        • default
          • 说明
            • 为属性设置缺省值
            • 使用注解时,可不设置此属性
  • 作用范围 (ElementType)
    • TYPE
      Class, interface (including annotation type), or enum declaration
    • FIELD
      Field declaration (includes enum constants)
    • METHOD
      Method declaration
    • PARAMETER
      Formal parameter declaration
    • CONSTRUCTOR
      Constructor declaration
    • LOCAL_VARIABLE
      ​Local variable declaration​​
    • ANNOTATION_TYPE
      Annotation type declaration
    • PACKAGE
      Package declaration​
    • TYPE_PARAMETER
      Type parameter declaration (since 1.8)
    • TYPE_USE
      Use of a type (since 1.8)
  • 综合示例
    • 定义注解
      Java注解(Annotation)
      Java注解(Annotation)
    • 使用注解
      Java注解(Annotation)
  • 参考

相关文章: