一、概述
注解:告诉编译器如何运行程序。
作用:1. 告诉编译器如何运行程序;2. 简化(取代)配置文件
二、常用的注解
// 重写父类的方法 @Override public String toString() { return super.toString(); } // 抑制编译器警告 @SuppressWarnings({"unused","unchecked"}) private void save() { List list = null; } // 标记方法以及过时 @Deprecated private void save1() { }
三、自定义注解
通过自定义注解,可以给类、字段、方法上添加描述信息!
1.注解基本写法
/** * 自定义注解 (描述一个作者) * */ public @interface Author { /** * 注解属性 * 1. 修饰为默认或public * 2. 不能有主体 */ String name(); int age(); }
使用:
@Author(name = "Jet", age = 30) public void save() { }
2.带默认值的注解
public @interface Author { /** * 注解属性 * 1. 修饰为默认或public * 2. 不能有主体 */ String name(); int age() default 30; // 带默认值的注解; 使用的时候就可以不写此属性值
3.默认名称的注解
注解属性名称为value,这就是默认名称
public @interface Author { // 如果注解名称为value,使用时候可以省略名称,直接给值 // (且注解只有一个属性时候才可以省略名称) String value(); }
使用
@Author("Jet")
@Author(value = "Jet")
4.注解属性类型为数组
public @interface Author { String[] value() default {"test1","test2"}; }
使用:
@Author({“”,“”}) public void save() { }
四、元注解
元注解:表示用在注解的注解!
1.指定注解的可用范围
@Target({
ElementType.TYPE, 类
ElementType.FIELD, 字段
ElementType.METHOD, 方法
ElementType.PARAMETER, 参数
ElementType.CONSTRUCTOR, 构造器
ElementType.LOCAL_VARIABLE 局部变量
})
2.指定注解的生命周期
@Retention(RetentionPolicy.SOURCE) 注解只在源码时期有效
@Retention(RetentionPolicy.CLASS) 注解在字节码级别有效 默认值
@Retention(RetentionPolicy.RUNTIME) 注解在运行时期有效
五、注解反射
@Author(remark = "保存信息!!!", age = 19) public void save() throws Exception { // 获取注解信息: name/age/remark // 1. 先获取代表方法的Method类型; Class clazz = App_2.class; Method m = clazz.getMethod("save"); // 2. 再获取方法上的注解 Author author = m.getAnnotation(Author.class); // 获取输出注解信息 System.out.println(author.authorName()); System.out.println(author.age()); System.out.println(author.remark()); }