注解
概念
注释:用文字描述程序的。给程序员看的。
注解:说明程序的,是给计算机看的。
定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、美剧是在同一个层次的。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
概念描述:
JDK1.5之后的新特性
说明程序的
作用分类:
- 编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
- 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
- 编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】
JDK内置注解
JDK预定义注解
@Override:检测被该注解标注的方法是否是集成自父类(接口)的
@Deprecated:该注解标注的内容,标识已过时
@SuppressWarnings:压制警告,这个注解是带参数的,一般使用all,压制所有警告。
代码演示:
package day20;
@SuppressWarnings("all")
public class Demo01 {
@Override
public String toString(){
return super.toString();
}
@Deprecated
public void show1(){
//有缺陷的
}
public void show2(){
//替代show1的方法
}
public void demo(){
show1();
}
}
自定义注解
格式:
-
元注解
-
public @interface 注解名称{
属性列表;
}
-
本质:本质上就是一个接口,该接口默认继承Annotation接口
属性:接口中的抽象方法
- 要求:
- 属性的返回值类型
- 基本数据类型
- String
- 枚举
- 注解
- 以上类型的数组
- 定义了属性,在使用时需要给属性赋值
- 如果定义属性时,使用default关键字给属性初始化值,则使用注解时,可以不进行属性的赋值。
- 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
- 属性的返回值类型
package day20;
public @interface MyAnno {
public String show();
//基本数据类型
int show1();
//字符串
String show2();
//枚举
Person per();
//注解
MyAnno2 anno2();
//数组
String[] str();
}
元注解
概念:用于描述注解的注解
需要掌握的元注解:
- @Target:描述注解能够作用的位置
- ElementType取值:
- TYPE:可以作用于类上
- METHOD:可以作用于方法上
- FIELD:可以作用于成员变量上
- ElementType取值:
- @Retention:描述注解被保留的阶段
- @Documented:描述注解是否被抽取到api文档中
- @Inherited:描述注解是否是否被子类继承
代码演示:
package day20;
import java.lang.annotation.*;
@Target(value = {ElementType.TYPE})//表示该MyAnno01注解只能作用于类上
@Retention(RetentionPolicy.RUNTIME)//当前被描述的注解会保留到class字节码文件中,并在JVM读取到。
@Documented
@Inherited
public @interface MyAnno01 {
}