听了慕课网中《全面解析Java注解》教程,本文是对该教程的总结与回顾。
一、定义
Java提供了一种原程序中的元素关联任务信息和任何元素的途径与方法。乍一看这个概念,我反正是没看懂,不知道您是否看懂了。但是@override这个您总认识吧,这个就是注解。
二、分类
本教程对Java注解是按以下两个维度进行分类的:
第一类:按运行机制分类
源码注解:
这类注解只存在于源码之中,编译后的Class文件里不存在
编译时注解:
这类注解存在于源码与Class文件中
运行时注解:
在运行阶段还起作用的注解,比较典型的是Spring中的@Autowired. **特别注意:只有第3种注解才会在反射的时候获取到**
第二类:按来源分类
- JDK本身自带的,比如以下的注解
- @Override:重写一个方法
- @Deprecated:标示某个方法是过时的
- @Suppvisewarnings:忽略注解的提示
- 第三方的注解,比如Spring中的注解
- 自定义注解
三、自定义注解
1.语法定义
- 使用@interface定义(不理解?我们是不是用class这个关键字定义类呢?)
- 成员的类型是受限制的,合法的类型只包含以下的几类:
- 基本类型如int ,String 等
- Class,Annotation,Enumeration等
- 成员必须以无参无异常的方式进行声明
- 如果只有一个成员需要写成value
2.元注解
元注解,是给注解的注解,包含有以下的四个
1. @Target:标明该注解的使用范围,包含以下的几个范围:
* 构造方法声明:constructor
* 字段声明:Field
* 局部变量声明:Local_variable
* 方法声明:Method
* 包声明:Method
* 参数声明:parameter
* 类接口:type
2. @Retention:注解的生命周期,包含有以下的几类
1. 只在源码显示,编译后丢失
2. 编译时会记录到Class中,运行时丢失
3. 运行时存在,可以通过反射获取到
3. @Inherited :此为标识符,标识该注解是否可以被继承
注意:只有Target中含有Type,即类类型的时候才会起作用。
4. @Documented:此为标识符,标识该类是否出现在Javadoc中
附:自定义注解的示例