注解:
注解与注释,
注解,告诉编译器如何运行程序!
注释, 给程序员阅读,对编译、运行没有影响;
注解作用
- 告诉编译器如何运行程序;
- 简化(取代)配置文件
/ 重写父类的方法
@Override
public String toString() {
return super.toString();
}
// 抑制编译器警告 List不加泛型会出警告
@SuppressWarnings({"unused","unchecked"})
private void save() {
List list = null;
}
// 标记方法以及过时
@Deprecated
private void save1() {
}
自定义注解元注解
元注解,表示注解的注解!
1.指定注解的可用范围:
@Target({
TYPE, 类
FIELD, 字段
METHOD, 方法
PARAMETER, 参数
CONSTRUCTOR, 构造器
LOCAL_VARIABLE 局部变量
})
2. 指定注解的生命周期
@Retention(RetentionPolicy.SOURCE) 注解只在源码级别有效
@Retention(RetentionPolicy.CLASS) 注解在字节码即别有效 默认值
@Retention(RetentionPolicy.RUNTIME) 注解在运行时期有效
注解反射
// 表示这个注解可以作用到方法、字段和类上
@Target({METHOD,FIELD,TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Author {
/**
* 注解属性
* 1. 修饰为默认或public
* 2. 不能有主体
*/
String name();
int age() default 30; // 带默认值的注解; 使用的时候就可以不写此属性值;
// 如果注解名称为value,使用时候可以省略名称,直接给值
// (且注解只有一个属性时候才可以省略名称)
String value();
}
@Author("/author")
public class AuthorDemo {
//@Author(value = "张三")
//@Author("张三")
@Author(name = "张三", age = 23, value = "男")
public void save() {
}
@Test
public void test1() throws NoSuchMethodException {
Class<AuthorDemo> clazz = AuthorDemo.class;
Method method = clazz.getMethod("save");
Author typeAuthor = clazz.getAnnotation(Author.class);
System.out.println(typeAuthor.value());// /author
// 1.先获取代表方法的Method类型
Author methodAuthor = method.getAnnotation(Author.class);
// 2、获取方法上的注解
System.out.println(methodAuthor.name());
System.out.println(methodAuthor.age());
System.out.println(methodAuthor.value());
}
}