前言
- 注解就是代码中出现的@
- 学习注解能够看懂别人写的代码,特别是框架相关的代码
- 让编程更简单,代码更加清晰
- 能让别人高看一眼,会使用自定义注解
注解是Java提供了一种源程序中的元素关联任何信息和任何元数据的途径和方法
jdk中的注解
1 | //重写覆盖的注释 |
注解分类
- 按照运行机制分:1.源码注解、2.编译时注解、3.运行时注解
- 源码注解:只在源代码中存在,编译成class后就不存在了
- 编译时注解:注解在源码和class中都存在,告诉编译时候的注解,比如@Override
- 运行时注解,在运行阶段还会起作用,甚至会影响运行逻辑
- 按照来源分类:1.来自jdk的注解、2.来自第三方的注解、3.自定义注解
元注解:注解的注解
自定义注解
一个小栗子
1 | ({ElementType.METHOD, ElementType.TYPE}) |
- 用@interface修饰注解
- 成员以没有参数没有异常的方式来声明
- 成员可以指定一个default值
- 成员类型是受限的,合法的类型有基本类型(int,double…)和String,Class,Annotation,Enumeration
- 如果注解只有一个成员,则成员名只能是value(),在使用的时候可以忽略成员名和赋值(=)
- 注解类可以没有成员,没有成员的注解成为标识注解
元注解
1 | ({ElementType.METHOD, ElementType.TYPE}) |
1 | (RetentionPolicy.RUNTIME) |
1 |
|
1 |
|
自定义注解的使用
使用注解的语法
@<注解名>(<成员名>=<成员值>,<成员名2>=<成员值2>)
放在相应的类或方法上1
2
3
4
5
6
7"hello class", author = "world class",age = 19) (desc =
public class Father {
"hello method", author = "world method",age = 19) (desc =
public void hh(){
}
}
解析自定义注解
概念:通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑
1 | public static void main(String[] args) { |
注解的继承
- 注解的继承不能继承接口的注解,只能继承父类的注解
- 注解的继承只能继承类的注解,不能继承方法的注解