目录
1、注解概念
(1)注解,或者叫做注释类型,英文单词是:Annotation
(2)注解Annotation是一种引用数据类型。编译之后也是生成xxx.class文件
(3)语法格式:
[修饰符列表] @interface 注解类型名{}
(4)注解作用:
第一:注解使用时的语法格式是:
@注解类型名
第二:注解可以出现在类上、枚举上、接口上、属性上、方法上、变量上、参数上等....注解还可以出现在注解类型上。
2、JDK内置注解
java.lang包下的注释类型:
掌握:
(1) Deprecated 用 @Deprecated 注释的程序元素,
不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
Deprecated这个注解标注的元素已过时。
这个注解主要是向其它程序员传达一个信息,告知已过时,有更好的解决方案存在
掌握:
(2)Override 表示一个方法声明打算重写超类中的另一个方法声明。
它是标识性注解,给编译器做参考的。
编译器看到方法上有这个注解的时候,编译器会自动检查该方法是否重写了父类的方法。
如果没有重写,报错。
这个注解只是在编译阶段起作用,和运行期无关
@Override这个注解只能注解方法。
@Override这个注解是给编译器参考的,和运行阶段没有关系。
凡是java中的方法带有这个注解的,编译器都会进行编译检查,如果这个方法不是重写父类的方法,编译器报错。
不用掌握:
(3)SuppressWarnings 指示应该在注释元素(以及包含在该注释元素中的
所有程序元素)中取消显示指定的编译器警告
3、元注解
什么是元注解?
用来标注“注解类型”的“注解”,称为元注解。
常见的元注解有哪些?
Target
Retention
关于Target注解:
这是一个元注解,用来标注“注解类型”的“注解”
这个Target注解用来标注“被标注的注解”可以出现在哪些位置上。
@Target(ElementType.METHOD):表示“被标注的注解”只能出现在方法上。
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE})
表示该注解可以出现在:
构造方法上
字段上
局部变量上
方法上
....
类上...
关于Retention注解:
这是一个元注解,用来标注“注解类型”的“注解”
这个Retention注解用来标注“被标注的注解”最终保存在哪里。
@Retention(RetentionPolicy.SOURCE):表示该注解只被保留在java源文件中。
@Retention(RetentionPolicy.CLASS):表示该注解被保存在class文件中。
@Retention(RetentionPolicy.RUNTIME):表示该注解被保存在class文件中,并且可以被反射机制所读取。
4、注解里面有属性的情况
(1)如果注解内有属性,那么再使用的时候要在括号里面给属性注入值,除非在注解内部定义了默认值
注解定义
注解使用
(2)如果注解只有一个属性,并且属性名是"value"时,该注解使用时注入时可省略"value=" ,直接写值;两个条件缺一不可
注解定义
注解使用
5、注解中属性的类型
(1)类型可以是
(2)注入值时数组是大括号,如果数组中只有1个元素:大括号可以省略
如
枚举
注解定义
注解使用
4、Retention的源代码
//元注解
public @interface Retention {
//属性
RetentionPolicy value();
}
RetentionPolicy的源代码:
public enum RetentionPolicy {
SOURCE,
CLASS,
RUNTIME
}
//@Retention(value=RetentionPolicy.RUNTIME)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation{}
5、通过反射机制取出注解、获取注解的属性值
先要通过反射获取类、方法
(1)doSome.isAnnotationPresent(MyAnnotation.class):判断注解是否存在
(2)doSome.getAnnotation(MyAnnotation.class):获取注解
(3)annotation.name()
annotation.password():获取注解的属性的值
定义注解
注解使用及获取注解及其属性值
6、注解在开发中的作用
注解就像是一个标记;通过这个标记可以规定或提示元素上有标记怎么办,没标记怎么办
比如@Overwide规定重写方法名和父类的方法名一致
还有如下例
例:
需求:
假设有这样一个注解,叫做:@Id
这个注解只能出现在类上面,当这个类上有这个注解的时候,
要求这个类中必须有一个int类型的id属性。如果没有这个属性
就报异常。如果有这个属性则正常执行
定义注解
创建注解修饰的类
自定义异常用于终端程序以及提示
业务逻辑判断