概念
对比 - 注释:用文字描述程序,更程序员看的。
注解:说明程序的,给计算机看的。
JDK中预定义的注解
- @Override : 检测被该注解标注的方法是否是继承自父类的
- @Deprecated : 将该注解标注的内容,表示为已过时
- @SuppressWarnings : 压制警告,使此元素以及其子元素不显示编译器警告,一般传递参数all
- @SuppressWarnings(“all”)
自定义注解
格式:
元注解
public @Interface 注解名称{}
本质: 注解的本质就是接口,该接口默认继承Annotation接口
public interface 注解 extends java.lang.annotation.Annotation{}
属性
概念: 接口中的抽象方法
要求: 1. 属性的返回值类型 (仅有几种): 基本数据类型、String、枚举、注解、前4种的数组
2.在定义了属性后,使用时需要给属性赋值 (或者定义时使用default默认赋值)
3.value属性 : 如果只有一个属性需要赋值,且属性名为value,直接赋值即可(可省略value)
4.数组属性,使用大括号包裹,数组中元素个数为1时,可省略大括号。
//自定义注解
public @interface MyAnno {
int age() default 18;
String name();
int[] ints();
}
//使用注解
public class testdemo {
@MyAnno(age = 15,name = "yy",ints = {0,1,5})
public void test(){
}
}
元注解
概念:描述注解的注解
元注解
@Target : 描述注解能够作用的位置
ElementType取值:TYPE(类)、METHOD(方法)、FIELD(成员变量)
@Retention :描述注解被保留的阶段
RetentionPolicy取值:
RUNTIME(通常使用):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
CLASS:当前被描述的注解,会保留到class字节码文件中,不会被JVM读取到
SOURCE:当前被描述的注解,不会保留到class字节码文件中
@Document : 描述注解是否被抽取到api文档当中
@Inherited : 描述注解是否被子类自动继承
使用注解
个人总结: 注解多用来代替配置文件(xml),使得配置更加灵活,可以在相关代码区域通过注解进行配置。
通过定义注解、注解的属性,在需要调用注解时通过反射得到Class对象上的注解,调用注解抽象方法返回属性值。这一过程实际就是在内存中创建了一个注解接口的子类,实现了属性方法,返回了默认值或者配置值。