注解

一、概述

注解:告诉编译器如何运行程序。

作用: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());
    }
原文地址:https://www.cnblogs.com/FlySheep/p/4751967.html