Java中常用注解
// 重写父类的方法
@Override
public String toString() {
return super.toString();
}
// 抑制编译器警告
@SuppressWarnings({"unused","unchecked"})
private void save() {
List list = null;
}
// 标记方法以及过时
@Deprecated
private void save1() {
}
自定义一个注解
定义:
- 基本写法
public @interface Author {
/**
* 注解属性
* 1. 修饰为默认或public
* 2. 不能有主体
*/
String name();
int age();
}
- 带默认值的注解
public @interface Author {
/**
* 注解属性
* 1. 修饰为默认或public
* 2. 不能有主体
*/
String name();
int age() default 30; // 带默认值的注解; 使用的时候就可以不写此属性值
}
- 默认名称的注解
注解属性名称为value,这就是默认名称
public @interface Author {
// 如果注解名称为value,使用时候可以省略名称,直接给值
// (且注解只有一个属性时候才可以省略名称)
String value();
}
使用
@Author(“Jet”)
@Author(value = “Jet”)
- 注解属性类型为数组:
public @interface Author {
String[] value() default {"test1","test2"};
}
使用:
@Author({“”,“”})
public void save() {
}
元注解
元注解用来描述 该注解类使用的范围(类,字段,方法等),以及注解的生命周期
- 元注解Target - 定义注解的可用范围
// 接收一个数组类型
@Target({
TYPE,//类
FIELD , //属性
METHOD, //方法
PARAMETER, //参数
CONSTRUCTOR,//构造函数
LOCAL_VARIABLE//局部变量
})
- 元注解Rutention - 指定注解的声明周期
@Retention(RetentionPolicy.RUNTIME) // 字节码级别有效
- 源码 @Retention(RetentionPolicy.SOURCE)
- 字节码 @Retention(RetentionPolicy.CLASS)
- 运行时 @Retention(RetentionPolicy.RUNTIME)
一个注解只能声明一个级别
- 使用方式
//@Retention(RetentionPolicy.SOURCE)
//@Retention(RetentionPolicy.CLASS)同时写三个会报错
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE})
public @interface Author {
//和接口,枚举 一样 所有的方法 默认 final static public
String name() default "格锅";
String value() default "hehe";
// 数组
String[] array();
}
@Author(name= "测试")
public class APP2 {
//@Author()在方法上使用该注解 会报错
public void save(){
};
}
获取注解信息
@Author(name="类",value="hehe")
public class APP2 {
@Test
public void save() throws Exception{
//拿到类上的注解
Author mA = APP2.class.getAnnotation(Author.class);
System.out.println("name = "+mA.name());
};
@Author(name="方法")
public void getMethodAnnotiation() throws Exception{
// 需要拿到方法
// 拿到方法得注解对象
Method gg = APP2.class.getDeclaredMethod("getMethodAnnotiation");
Author mA = gg.getAnnotation(Author.class);
System.out.println("name = "+mA.name());
}
}