Java中的注解

2019-09-16  本文已影响0人  iDevOps
什么是注解
注解分类
/**
 * 注解文档演示
 *
 * @author SN
 * @version 1.0
 * @since 1.5
 */
public class AnnotationDoc {

    /**
     * 加法运算
     * @param a 整数
     * @param b 整数
     * @return 两数之和
     */
    public int add(int a, int b){
        return a+b;
    }

}
执行命令, 会生成Api文档
javadoc AnnotationDoc .class

正在加载源文件AnnotationDoc.java...
正在构造 Javadoc 信息...
标准 Doclet 版本 1.8.0_131
正在构建所有程序包和类的树...
正在生成.\com\test\annotation\AnnotationDoc.html...
正在生成.\com\test\annotation\package-frame.html...
正在生成.\com\test\annotation\package-summary.html...
正在生成.\com\test\annotation\package-tree.html...
正在生成.\constant-values.html...
正在构建所有程序包和类的索引...
正在生成.\overview-tree.html...
正在生成.\index-all.html...
正在生成.\deprecated-list.html...
正在构建所有类的索引...
正在生成.\allclasses-frame.html...
正在生成.\allclasses-noframe.html...
正在生成.\index.html...
正在生成.\help-doc.html...

Api文档
常见的JDK中预定义的注解

@Override : 检测被该注解标注的方法是否继承与父类(接口)
@Deprecated : 该注解标注的标识已经过时
@SuppressWarnings : 压制警告,例如 @SuppressWarnings("all")
等等....

自定义注解
public @interface 注解名称{
    属性列表;
}

MyAnno.class

public @interface MyAnno {
}
1. 执行javac命令, MyAnno.java  --> MyAnno.class
javac MyAnno.class

2. 执行javap命令反编译MyAnno.class
javap MyAnno.class
Compiled from "MyAnno.java"
public interface MyAnno extends java.lang.annotation.Annotation {
}

得出结论: 注解本质上就是一个接口,该接口默认继承Annotation接口

返回值类型
基本数据类型、String、枚举、注解和以上类型的数组
属性值
1.如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
2.如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
3.数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略

# 自定义注解
public @interface MyAnno {
    int value();
    String name() default "lisi";
    String[] strs();
}
# 使用注解
@MyAnno(value = 1, strs = {})
public void test(){

}

用于描述注解的注解

/**
 元注解:用于描述注解的注解
 * @Target:描述注解能够作用的位置
 *      ElementType取值:
 *          TYPE:可以作用于类上
 *          METHOD:可以作用于方法上
 *          FIELD:可以作用于成员变量上
 * @Retention:描述注解被保留的阶段
 *      @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
 * @Documented:描述注解是否被抽取到api文档中
 * @Inherited:描述注解是否被子类继承
 */
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnno {
    int value();
    String name() default "lisi";
    String[] strs();
}
上一篇 下一篇

猜你喜欢

热点阅读