注解

作者: 月寒兮夜凉 | 来源:发表于2016-11-03 16:44 被阅读73次

    优秀文章

    博客园:
    peida > Annotation的基本概念自定义注解入门


    说明

    • 自JDK1.5版本开始引入;
    • 只可包含成员变量;
    • 本身不会影响程序代码的执行;
    • 可以为程序元素(包、类、方法、属性、参数)提供特殊标记(注解),这些标记可嵌入信息(元数据),并且在程序运行时通过反射机制来获取这些信息;
    • 元数据(metadata),关于数据的数据;
    • 根据注解参数可分:标记注解(无参)、单值注解(单个参数)、完整注解(多个参数);
    • 根据注解用途可分:内置注解、元注解(注解的注解)、自定义注解;

    系统内置标准注解

    1. @Override:用于修饰覆盖了父类方法的方法
      只可用于方法,若使用该注解的方法确实覆盖了父类的方法,则代码编译正常,若没有,则代码编译报错,常用于判断方法重写;
    2. @Deprecated:用于修饰已经过时的类成员
      使用该注解标记的类成员,编译器将不再鼓励使用这个类成员(编译时报警),并且该类成员通过继承被子类获得,同样具备该效果(延续性);
    3. @SuppressWarnnings:用于通知java编译器禁止特定的编译警告
      通常用于无法避免警告的程序元素,告诉编译器停止对该元素的警告,SuppressWarnnings注解具备一个String[]的成员,成员中可添加禁止的警告名(编译器会忽略无法识别的警告名);

    自定义注解

    • 元注解(meta-annotation)
      • 说明:JDK1.5中定义了4个标准元注解,元注解与其他注解(内置标准注解除外)不同在于元注解是组成注解的重要组成部分,前者只用作描述(注解)后者,后者被前者描述(注解)才具备实际的注解功能;
        1. @Target(ElementType):用于描述注解的使用范围
        • 使用范围取值(ElementType):
          <1>FIELD:用于描述域
          <2>PACKAGE:用于描述包
          <3>TYPE:用于描述类、接口(包括注解类型) 或enum声明
          <5>METHOD:用于描述方法
          <6>PARAMETER:用于描述参数
          <7>LOCAL_VARIABLE:用于描述局部变量
        1. @Retention(RetentionPoicy):用于描述注解的有效范围
        • 有效范围取值(RetentionPoicy):
          <1>SOURCE:在源文件中有效
          <2>CLASS:在class文件有效
          <3>RUNTIME:在运行时有效
        1. @Documented:用于声明注解的可识别性
        • 说明:注解是不被javadoc等工具处理的,若注解使用@Documented描述,则可被javadoc等工具识别并文档化(生成API);
        1. @Inherited:用于描述注解的延续性,只作用于类
        • 说明:类上的注解是不会被继承的,若注解使用@Inherited描述,则该类注解可以被继承并还可继续被继承;
        • 注意:方法上的注解通常是可以被继承的,但是子类若重写了父类的方法,则此方法上的注解则无法继承得到;
    • 自定义
      • 接口:java.lang.annotation.Annotation
      • 声明:@interface
      • 格式:
        @meta-annotation
        public @interface 注解名 {
            public type name() default value;
        } 
        
      • 成员可为:所有基本数据类型、String、Class、enum、Annotation、及前面所有类型的数组;
      • 默认值:注解成员必须有确定的值,要么在定义时使用默认值,要么在使用时指定值,且非基本类型的成员值不能为null;
    • 实例
      //使用@Target元注解描述作用范围
      @Target(ElementType.TYPE)
      public @interface TestAnnotation{
          //int类型成员
          public int intType() default -1;
          //String类型成员
          public String strType() default "";
          //enum类型成员
          public enum Color{BULE,RED,GREEN};
      }
      
    ***
    ####最后
    * 通过反射可获取注解信息;
    * 注解的存在与否不影响代码的运行,但针对注解设计有效的处理流程可实现注解的价值;

    相关文章

      网友评论

        本文标题:注解

        本文链接:https://www.haomeiwen.com/subject/qnabuttx.html