注解

作者: 何几时 | 来源:发表于2020-12-03 22:16 被阅读0次

    目录

    1. 注解概述
    2. 内置注解
    3. 元注解
    4. 自定义注解

    1 注解概述

    作用

    1. 不是程序本身,可对程序作出解释
    2. 可别其他程序读取(例如编译器)

    2 内置注解

    见到抛出最常用的三个:

    1. @Override -- 重写父类方法
    2. @Deprecated -- 标注为不推荐用法(可用但不推荐)
    3. @SuppressWarnings("xxx") -- 忽略警告

    @SuppressWarnings("xxx")

    @SuppressWarnings是带参数的

    1. ~("all")
    2. ~("unchecked")
    3. ~(value = {"unchecked", "depreciation"}) == ~({"unchecked", "depreciation"})

    3 元注解

    定义:给(自定义)注解作注解的注解,主要用于确定自定义注解的使用范围文件状态是否写入JavaDoc是否继承父类的注解

    元注解有4个(重要的是@Target和@Retention):

    • @Target
    • @Retention
    • @Documented
    • @Inherited

    @Target的三种写法

    简化写法的依据:

    当你的注解变量是 String value ( 也可以是 int value )时,在注解使用时可以把
    @MyAnnotation3(value = "hello")
    简化成
    @MyAnnotation3("hello")

    // 完全写法
    @Target(value = ElementType.METHOD)
    
    // 推荐的简便写法
    @Target(ElementType.METHOD)
    
    // 多个参数时,用 { , }
    @Target({ElementType.TYPE, ElementType.METHOD})
    
    

    4 自定义注解

    定义模板

    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface MyAnnotationName{
        // ElemType varName() default xxxx;
        String value() default "Bonjour";
        int age();
    }
    

    例程

    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface MyAnnotation2{
        // 注解的参数: 参数类型 + 参数名();
    //    String name() default "";
        String name();
        int age() default 0;
        int id() default -1;
    }
    

    使用例程注解

    // 注解可以显示赋值,   如果没有默认值,我们就必须要给注解赋值
        @MyAnnotation2(name = "HELLO")
        @MyAnnotation3(3)
        public void test(){};
    

    分析--这里有三个重点:

    1. 自定义注解时,把注解当成一个“方法”,里面定义参数的方式有所不同在于参数名后面加()(例如:int age();
    2. 定义变量语句中String value() default "Bonjour"; 后面出现的default "Bonjour"指的是默认值。当使用注解时,有默认值的注解变量可以不用赋值,没有默认值的变量必须要赋值,否则报错

    完整例程

    package annotation;
    
    import org.omg.SendingContext.RunTime;
    
    import java.lang.annotation.*;
    
    // 测试元注解
    public class Test02 {
    
        @MyAnnotation
        public void test(){
    
        }
    }
    
    
    // 自定义一个注解
    // Target 表示我们的注解可以用在哪些地方
    @Target(value = ElementType.METHOD)
    // Retention 表示我们的注解在什么文件格状态下有效
    // SOURCE 是指在源码时有效,即还没编译成 .class 文件
    // CLASS  是指编译成 .class 文件 有效
    // RUNTIME是指一直有效
    @Retention(value = RetentionPolicy.RUNTIME)
    
    // Documented 表示将我们定义的注解放进JAVAdoc中
    @Documented
    
    // @Inherited 表示继承父类的注解
    @Inherited
    @interface MyAnnotation{
    
    
    }
    

    相关文章

      网友评论

          本文标题:注解

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