▲所有Java类都是Object的子类。
▲所有Annotation都是java.lang.annotation.Annotation的子类
▲Annotation通常作用在package、Class、Field、Method上面。
元注解
JDK提供了几个特殊的Annotation,称为元Annotation,只能用在Annotation上面,元Annotation就是用于修饰注解的注解。比较常用的元Annotation,比如@Target、@Retention
@Target(vaule= ElementType.TYPE)
@Target注解表示定义的Annotation作用在哪里。
ElementType.TYPE:只能作用在class、interface、Enum上面。
ElementType.Field:只能作用在Field上面
ElementType.Method:只能作用在Method上面
如果不指定@Target,那么意味着作用位置不受限制
@Retention注解表示Annotation的保留策略
RetentionPolicy.Class:运行时不保留,不可以通过反射读取。
RetentionPolicy.RUNTIME:运行是保留,可以通过反射读取。自定义注解90%是这种。
RetentionPolicy.SOURCE:丢弃。
自定义注解类编写的一些规则
- Annotation定义为@interface, 所有的Annotation会自动继承java.lang.annotation.Annotation这一接口,并且不能再去继承别的类或是接口.
- 参数成员只能用public或默认(default)这两个访问权修饰
- 参数成员只能用基本数据类型和String、Enum、Class、annotations等数据类型,以及这一些类型的数组.
- 要获取类方法和字段的注解信息,必须通过Java的反射技术来获取 Annotation对象,除此之外没有别的获取注解对象的方法
1 | package com.zx.注解; |
1 | package com.zx.注解; |
1 | package com.zx.注解; |