注解的基本用法
注解
注解:说明程序的。给计算机看的
注释:用文字描述程序的。给程序员看的
JDK中预定义的一些注解
@Override
@Deprecated
@SupperssWarnings
自定义注解
格式:
- 元注解:
public @interface 注解名称{
属性列表;
}
- 本质:注解本质上就是一个接口,该接口默认继承Annotation接口
public interface MyAnno extends java.lang.annotation.Annotation {
}
-
属性:接口中的抽象方法
-
要求:
-
属性的返回值类型有下列取值
-
基本数据类型
-
String
-
枚举
-
注解
以上类型的数组。
-
-
定义了属性,在使用时需要给属性赋值
- 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
- 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
- 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略
元注解:用于描述注解的注解
-
@Target
: 描述注解能够作用的位置ElementType
取值:
TYPE
:可以作用于类上
METHOD
:可以作用于方法上
FIELD
:可以作用于成员变量上 -
@Retention
: 描述注解被保留的阶段 -
@Retention( RetentionPolicy.RUNTIME)
:当前被描述的注解,会保留到class字节码文件中,并被JVM读取到 -
@Documented
: 描述注解是否被抽取到api文档中 -
@Inherited
: 描述注解是否被子类继承
在程序中使用(解析)注解:获取注解中定义的属性值
-
获取注解定义的位置的对象(Class,Method,Field)
-
获取指定的注解
getAnnotation(Class)
方法
//其实就是在内存中去生成了一个该注解接口的子类实现对象
public class ProImpl implements Pro{
public String className(){
return "com.domain.Person";
}
public String methodName(){
return "eat";
}
}
- 调用注解中的抽象方法获取配置的属性值
小结:
-
以后大多数时候,我们会使用注解,而不是自定义注解
-
注解给谁用编译器给解析程序用
-
注解不是程序的一部分,可以理解为注解就是一个标签