Java注解
- 相关概念
- 预定义的一些注解
- 自定义注解
- 在程序中使用的注解
一、相关概念
1.1、定义
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5开始引入的一种新特性,与类、接口、枚举在同一层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行声明、注释。
1.2、按作用分类
- 编写文档:通过代码里面标识的注解生成文档【生成api帮助文档】 命令:javadoc xx.java
- 代码分析:通过代码里面标识的注解对代码进行分析【使用反射】
- 编译检查:通过代码里面标识的注解让编译器能够实现基本的编译检查【Override】
二、预定义的一些注解
2.1、常见的一些注解【长期更新】
- @Override:检测被注解的方法是否是继承自父类/接口。如果不是将无法通过编译
- @Deprecated:用来标识已经过时的方法,建议使用新版方法
- @suppressWarnings:压制警告
@Override//用于检测toString方法是否是继承自父类,如果不是则当前类无法通过编译
public String toString() {
return "";
}
@Deprecated//标识该方法已过时,有更好的新方法
public int sum(int a,int b){
return a+b;
}
public void test(){
System.out.println(this.sum(1,2));//可以看到sum方法被加上了删除线,表示该方法已过时
}
@suppressWarnings("all")//压制所有警告
public class Test{}
三、自定义注解
3.1、格式
//接口--注解
@Target(value={ElementType.TYPE,ElementType.METHOD})
public @interface MyAnno{//MyAnno就是自定义的注解名字
//注解属性
void show();//使用时不需要给当前注解赋值
String name();//使用时必须给当前注解赋值
}
//测试类
public class Test{
@MyAnno(name = "super")//使用时必须赋值,类型与属性保持一致
public void test(){
}
}
3.2、本质
public interface MyAnno extends java.lang.annotation.Annotation{}
3.3、属性
接口中的抽象方法:
- 方法的返回值允许的类型:基本数据类型、字符串、枚举、注解、以上类型的数组
- 如果定义了方法,使用注解的时候必须赋值。
- 如果该注解只有一个属性且属性名为value,则可以省略属性名直接传值。比如:@MyAnno(“asdf”)
3.4、元注解
加载注解类名前面的注解,作用于注解类的注解。下面是四个最常用的元注解
- @Target:描叙该注解可以使用的位置。@Target(value={ElementType.TYPE,ElementType.METHOD})
- TYPE:可以作用于类上
- METHOD:可以作用于方法上
- FIELD:可以作用于成员变量上
- @Retention:描述该注解保留的阶段。@Retention(RetentionPolicy.RUNTIME)
- SOURCE:被该描述的注解类不会被保留到class字节码文件中
- CLASS:被该描述的注解类会被保留到class字节码文件中,但不会被JVM读取到
- RUNTIME:被该描述的注解类会被保留到class字节码文件中,且会被JVM读取到
- @Documented:被该注解描述的注解会被抽取到API文档中
- @Inherited:被该注解描述的注解会被子类继承