JavaSE07_注解

本文详细介绍了Java注解的各个方面,包括注解的定义、内置注解如@Override和@Deprecated,元注解如@Target和@Retention,以及如何自定义注解。通过示例展示了注解的使用和特殊语法,帮助读者深入理解注解在Java编程中的作用和重要性。
摘要由CSDN通过智能技术生成

1 什么是注解

  • 注解(Annotation)是JDK5.0开始引入的新技术
  • 注解不是程序本身,但可以对程序作出解释(类似注释(comment))
  • 注解可以被其他程序(例如编译器等)读取
  • 注解以@注解名的形式存在于代码中,还可以添加一些参数值,例如@SuppressWarnings(value="unchecked")
  • 注解可以用在package,class,method,field等上,相当于为它们添加了额外的辅助信息,可以通过反射实现对这些元数据的访问

2 内置注解

  • @Override:定义在java.lang.Override中,用于修饰方法,表示一个方法打算重写超类中的一个方法
  • @Deprecated:定义在java.lang.Depercated中,可用于修饰方法、属性、类,表示不鼓励程序员使用这些代码,通常是因为它们很危险或者有更好的选择
  • @SuppressWarnings:定义在java.lang.SuppressWarnings中,用于抑制编译时的警告信息,此注解需要添加参数才能正确使用
    • @SuppressWarnings("all")
    • @SuppressWarnings("unchecked")
    • @SuppressWarnings("value={"unchecked", "deprecation"}")
    • 等等……

3 元注解

  • 元注解(meta-annotation)的作用是负责注解其他注解,Java定义了4个标准的元注解类型,为其他注解类型提供说明

  • 元注解和其支持的类可以在java.lang.annotation包中找到

    • @Target:用于描述注解的使用范围,其取值范围定义在ElementType枚举中

      public enum ElementType {
          TYPE,				// 类、接口、枚举类
          FIELD,				// 成员变量(包括枚举常量)
          METHOD,				// 成员方法
          PARAMETER,			// 方法参数
          CONSTRUCTOR,		// 构造方法
          LOCAL_VARIABLE,		// 局部变量
          ANNOTATION_TYPE,	// 注解类
          PACKAGE,			// 包
          
          /**
           * 类型注解
           * @Since 1.8
           */
          TYPE_PARAMETER,		
          TYPE_USE			
      }
      
    • @Retention:用于描述注解保留的时间范围(生命周期),共3种策略,定义在RetentionPolicy枚举中

      public enum RetentionPolicy {
          SOURCE,		// 编译时会被丢弃,仅在源码中存在
          CLASS,		// 默认策略,运行时会被丢弃,仅在class文件中
          RUNTIME		// 编译时将注解信息记录到class文件,运行时仍然保留,可通过反射获取注解信息
      }
      
    • @Documented:说明该注解将被包含在javadoc中

    • @Inherited:说明子类可以继承父类中的该注解

4 自定义注解

  • 使用@interface自定义注解,其自动继承java.lang.annotation.Annotation接口

  • 分析

    • @interface用于声明一个注解,格式为public @interface 注解名 {定义内容}

    • 自定义注解中只能定义注解类型元素(annotation type element),其语法为:

      public @interface MyAnnotation {
          public String name();
          int age() default 18;
          int[] array();
          String[] schools() default {"北京大学", "清华大学"};
      }
      
    • 注解类型元素的访问修饰符必须为public,不写默认为public

    • 注解类型元素的类型只能是基本类型、ClassString、枚举类型和注解类型,以及上述类型的一维数组

    • 可通过default声明参数的默认值,该值的类型必须与上一条中定义的类型一致

    • 如果只有一个注解类型元素,一般注解类型元素名为value

    • ()不是定义方法参数的地方,也不能在括号中定义任何参数,仅仅是一个特殊的语法

5 注解的特殊语法

  • 如果注解本身没有注解类型元素,那么在使用注解时可以省略括号,直接写为@注解名,其等价于@注解名()
  • 如果注解本身只有一个注解类型元素,且命名为value(),在使用注解时可以直接使用@注解名(注解值),其等价于@注解名(value = 注解值)
  • 如果注解中的某个注解类型元素是一个数组类型,但使用时仅需要填入一个值,那么可以直接写为@注解名(类型名 = 类型值),其等价于标准写法@注解名(类型名 = {类型值})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值