注解(Java用于工具处理的标注)

一. 使用注解

1. 含义

        注解是放在类,方法,字段,参数前的一种特殊“注释”,是一种用作标注的“元数据”。

2. 三类注解

        1)由编译器使用的注解,不会编译进.class文件,编译后扔掉;如:@Override、@SuppressWarnings。

        2)由工具处理.class文件使用的注解,编译进.class文件,加载结束后不会加载进JVM,被底层库使用,无需处理。

        3)程序运行期读取的注解,加载后一直存在于JVM中,最常用的注解。

3. 注意

        1)注解配置参数必须都是常量,所以定义注解时就确定了所有参数的值,正常每个参数都有默认值,如果不设置就使用默认值。

        2)如果参数名称是value且只有一个参数,那么可以省略参数名称。

二. 定义注解

1. 含义

        用@interface来定义注解,注解的参数类似无参方法,用default设定一个默认值(最好是!),最常用的参数应命名为value(有且只有它时可以省略参数名称)。

2. 元注解(修饰其他注解)

        1)@Target(最常用)

                定义源码被应用于哪些位置。

                ElementType.TYPE:类或接口或枚举

                ElementType.FIELD:成员变量字段

                ElementType.METHOD:方法

                ElementType.CONSTRUCTOR:构造方法

                ElementType.PARAMETER:方法参数

                ElementType.LOCAL_VARIABLE:能修饰局部变量

                ElementType.ANNOTATION_TYPE:能修饰注解

                ElementType.PACKAGE:能修饰包

        2)@Retention(默认CLASS期间)

                定义了注解的生命周期

                RetentionPolicy.SOURCE:编译期间

                RetentionPolicy.CLASS:class文件

                RetentionPolicy.RUNTIME:程序运行时(自定义常用!)

        3)@Documented

                是否将注解信息添加到javadoc文档中。

        4)@Repeatable(注解可重复,不常用)

                修饰的注解,可在同位置使用多个同样的注解。

        5)@Inherited(继承)

                修饰的注解,仅针对@Target(ElementType.TYPE)类型的类有效,子类可继承父类的注解。

3. 如何定义注解

        1)使用@interface定义注解类。

        2)添加参数、默认值;把最常用的参数定义为value(),所有参数都尽量设置默认值。

        3)添加元注解;必须设置@Targer和@Retention,@Retention一般设置为RUNTIME。

        

三. 处理注解

1. 注意

        1)所有注解都是class,都继承自java.lang.annotation.Annotation。

        2)读取注解,要使用反射,反射API提供的Annotation实例封装了注解的所有信息。

2. 获取注解

        1)判断某个注解是否存在于Class、Field、Method或Constructor。

                Class.isAnnotationPresent(注解.Class)

                Field.isAnnotationPresent(注解.Class)

                Method.isAnnotationPresent(注解.Class)

                Constructor.isAnnotationPresent(注解.Class)

        2)用反射API获取注解

                Class.getAnnotation(注解.Class)

                Field.getAnnotation(注解.Class)

                Method.getAnnotation(注解.Class)

                Constructor.getAnnotation(注解.Class)

                

3. 使用注解

        定义了注解,本身对逻辑程序没有任何影响,编写代码来使用注解,JVM不会自动给注解添加任何处理逻辑。

  • 37
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值