zoukankan      html  css  js  c++  java
  • java学习day17--API-注解

    注解

    1.什么是注解

    注解 (英文名Annotation)

    是从JDK5.0开始引入的一个新的技术.

    注解的作用:

    不是程序本身,可以对程序作出解释
    可以被其他程序读取(比如:编辑器)
    

    注解的格式:

    注解是以"@注解名"在代码中存在的,还可以添加一些参数值
    例如;`@SuppressWarnings(value="unchecked")
    

    注解适用于哪里?

    可以附加在package , class, method , field等上面,相当于给他们添加了额外的辅助信息
    我们可以通过反射机制编程实现对这些元数据的访问.
    

    2. 内置注解

    • @Override注解定义在java.lang.Override 中, 此注解用于修辞方法, 表示一个方法声明打算重写超类(父类)中的方法
    • @Deprecated 注解定义在java.lang.Deprecated 中, 此注解用于修辞方法, 属性, 类. 表示不鼓励程序员去使用, 通常是因为它可能存在危险或者存在更好的选择
    • @SuppressWarnings 定义在java.lang.SuppressWarnings 中, 用来抑制编译时的警告信息

    3. 元注解

    元注解的作用就是负责注释其他注解,java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明.

    //测试元注解
    @Liq
    public class Test02 {
        public  void test(){
        }
    }
    //定义一个注解
    //Target表示我们的注解可以用在哪些地方
    @Target(value={ElementType.METHOD,ElementType.TYPE})
    //Retention表示我们的注解在什么地方还有效
    //runntime > class > sources
    @Retention(value = RetentionPolicy.RUNTIME)
    //Documented表示我们的注解是否生成在doc中
    @Documented
    //Inherited 子类可以继承父类的注解
    @Inherited
    @interface Liq{
    
    }
    
    @Target   ElementType.class
    //描述注解的使用范围:
    // ElementType.ANNOTATION_TYPE        应用于注释类型
    // ElementType.CONSTRUCTOR         应用于构造函数
    // ElementType.FIELD                   应用于字段或属性
    // ElementType.LOCAL_VARIABLE      应用于局部变量
    // ElementType.METHOD              应用于方法级
    // ElementType.PACKAGE             应用于包声明
    // ElementType.PARAMETER           应用于方法的参数
    // ElementType.TYPE                应用于类的元素
    
    @Retention  RetentionPolicy.class
    //定义了该注解被保留的时间长短,某些注解仅出现在源代码中,而被编译器丢弃;
    //而另一些却被编译在class文件中; 编译在class文件中的注解可能会被虚拟机忽略,而另一些在class被装载时将被读取。
    //为何要分有没有呢?没有时,反射就拿不到,从而就无法去识别处理。
    // SOURCE        在源文件中有效(即源文件保留)
    // CLASS         在class文件中有效(即class保留)
    // RUNTIME           在运行时有效(即运行时保留)
    

    4. 自定义注解

    使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口

    格式:

    public @interface 注解名{
    定义内容
    }
    

    4.1 注解的参数

    自定义注解时,可以设置参数. 参数格式为 参数类型 参数名(); 例如: String name(); 在使用时如果没有默认值,则必须传递参数

    // 自定义注解
    @Target({ElementType.TYPE,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface liq{
        // 注解的参数: 参数类型 + 参数名();
        String name();
    }
    
    //使用注解
    public class test{
        @liq(name = "liq")
        public void test(){}
    }
    

    4.2 注解的默认值

    如果注解已经自定义了默认值, 参数可以不用写.如下:

    //自定义注解
    @Target({ElementType.TYPE,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface liq{
        //注解的参数:参数类型+参数名(); default为默认值
        String name() default  "";
        int age() default 0;
        int id() default -1;//如果默认值为-1,代表不存在,
        String[] school() default { "河工大","北大"};
    }
    // 使用注解
    public class Test03 {
        // 因为注解里面 已经 有了默认值 default 0; 所以age的属性可写可不写
        //注解可以显示赋值,如果没有默认值,我们就必须给注解赋值
        @liq(name = "李强",school = "河工大")
        public  void test(){ }
    

    4.3 当注解只有一个参数时

    如果说注解里只有一个值,建议使用value做参数名, 因为使用value做参数名, 写参数的时候就可以省略参数名

    例如:

    // 定义注解
    @Target({ElementType.TYPE,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface  liq2{
        String value();
    }
    
    //使用注解
    public class test(){
         @liq2("李强")
        public  void test1(){ }
    }
    
  • 相关阅读:
    电脑快捷键
    方法
    运算符和表达式
    Java关键字和标识符
    字体和文本
    盒子模型
    css
    常用标签
    第一次课(上)
    出现次数最多的数字
  • 原文地址:https://www.cnblogs.com/liqbk/p/12945758.html
Copyright © 2011-2022 走看看