美文网首页
Java注解基础

Java注解基础

作者: melodylzl | 来源:发表于2019-11-02 17:10 被阅读0次

    注解的本质

    注解的本质就是一个继承了Annotation接口的接口

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.SOURCE)
    public @interface Override {
    
    }
    

    这是注解 @Override 的定义,其实它本质上就是:

    public interface Override extends Annotation{
        
    }
    

    元注解

    元注解就是修饰注解的注解,Java中有以下几个元注解:

    • @Target:注解的作用目标
    • @Retention:注解的生命周期
    • @Documented:注解是否应当被包含在 JavaDoc 文档中
    • @Inherited:是否允许子类继承该注解

    @Target的几个枚举值:

    • ElementType.TYPE:允许被修饰的注解作用在类、接口和枚举上
    • ElementType.FIELD:允许作用在属性字段上
    • ElementType.METHOD:允许作用在方法上
    • ElementType.PARAMETER:允许作用在方法参数上
    • ElementType.CONSTRUCTOR:允许作用在构造器上
    • ElementType.LOCAL_VARIABLE:允许作用在本地局部变量上
    • ElementType.ANNOTATION_TYPE:允许作用在注解上
    • ElementType.PACKAGE:允许作用在包上

    @Retention的几个枚举值:

    • RetentionPolicy.SOURCE:当前注解编译期可见,不会写入 class 文件
    • RetentionPolicy.CLASS:类加载阶段丢弃,会写入 class 文件
    • RetentionPolicy.RUNTIME:永久保存,可以反射获取

    JAVA 的内置三大注解

    • @Override: 标记方法是重载父类
    • @Deprecated:标记类或方法或字段过期,不推荐使用
    • @SuppressWarnings:压制Java的警告

    自定义注解

    定义

    @Target({ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotation {
        String   value();
        String   name();
        int      age();
        String[] newNames();
    }
    

    使用

    @MyAnnotation(
        value="123",
        name="Jakob",
        age=37,
        newNames={"Jenkov", "Peterson"}
    )
    public class MyClass {
    
    
    }
    

    参考文献:

    相关文章

      网友评论

          本文标题:Java注解基础

          本文链接:https://www.haomeiwen.com/subject/qxkhbctx.html