一.Java注解是什么东西?为什么要用?
- 网上的理解:Java注解其实就是写在接口、类、属性、方法上的一个标签,或者说是一个特殊形式的注释,与普通注释不同 普通注释只是一个注释 而注解在代码运行时是可以被反射获取并操作的,如果没有使用反射或者其他检查 那么注解是没有真实作用的,也不会影响程序正常运行结果
- 我的理解:简单来说Java注解可以说是一个标识,当你看到这个注解 你就知道它是干什么的 比如@Override 你就知道他是重写方法的标识,且它可以通过反射获取并操作的 如果没有使用到注解 也不会影响程序正常运行
- 为什么要用呢?两个字“方便”
二.元数据到底是什么?(插播一下元数据概念)
- Java注解是提供了一种为数据设置元数据的方法
- 举例:
- 你自己就是一个数据 人-xxx
- 你的身高体重三围就是你的元数据 人-xxx的信息
- 应该很好理解
三.元注解的使用
-
五种元注解
-
@Retention 翻译:保留
标明自定义注解的生命周期
Java代码从编写到运行生命周期:
源文件-》Class文件-》运行时数据
SOURCE-》CLASS-》RUNTIME
各个生命周期的用途
Source:跟注释一样 一个标识
Class:基本没见过使用过 有见过的同学可以评论出来
Runtime:运行阶段最常用的
常用的注解:@Service@Compoent都是这个阶段
这个阶段可以通过反射获取信息
-
@Target 翻译:目标🎯
标明自定义注解的使用范围
可传多个value值 底层value值是数组
举例(常用)
@Target(ElementType.TYPE,ElementType.FIELD,ElementType.METHOD)
TYPE:类、接口、注解、枚举
FIELD:属性
METHOD:方法
-
@Inherited 翻译:继承
只有子类继承父类 注解会被继承 子类就可以用父类的注解了
接口继承接口/类实现接口不行
-
@Repeatable 翻译:重复
不重要 等到一千年以后 也用不到一次
-
@Documented
可以在idea通过顶部标签栏找到Tools标签Generate JavaDocument生成对应的Java文档 被@Documented修饰的类 生成文档会显示对应的注解 没有修饰则不显示(没什么用)
创建注解举例:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface AppleElectorics{
String value()default “”;
}
四.标准注解(常用固定注解)
(1)@Override 标记一个方法重写父类
(2)@Deprecated 标记一个元素已经过期 避免使用(就是不再使用了)
可以是方法 构造函数 参数等等
(3)@SuppressWarnings 不输出对应的编译警告
常用参数:
all:忽略所有的编译器警告
unchecked:验证泛型编程,编译器无法验证类型时
unused:那些未使用的变量,方法或参数相关的警告,也就是代码现在不用了 可以用这个参数