zoukankan      html  css  js  c++  java
  • 注解

    注解

    什么是注解

    • 注解是从JDK5.0开始引入的新技术
    • 注解的作用:
    1. 与注释作用相同,可以对程序做出解释

    2. 可以被其他程序(如编译器)读取

    • 注解的格式:以“@注释名”在代码中存在,还可以添加一些参数值
    • 注解的应用范围:可以附加在package,class,method,field等上面,相当于给它们添加了额外的辅助信息,可以通过反射机制编程实现对这些元素的访问

    内置注解

    • @Override:只是用于修辞方法,表示一个方法声明打算重写超类中的另一个声明
    • @Deprecated:可以用于修辞方法,属性,类,表示不建议使用
    • @SuppressWarnings:用来抑制编译时的警告信息。需要添加参数
    package annotation;
    
    //抑制编译警告
    @SuppressWarnings("all")
    public class Test01 {
        //重写的注解,有检查功能
        @Override
        public String toString() {
            return "Test01{}";
        }
        //不推荐程序员使用,
        @Deprecated
        public static void test(){}
    
        public static void main(String[] args) {
    
        }
    }
    
    
    

    元注解

    • 元注解的作用:负责注解其他的注解
    • 元注解的种类:
    1. @Target:用于描述注解的使用范围

    2. @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE < ClASS < RUNTIME)

    3. @Document:说明该注解将被包含在JavaDoc中

    4. @Inherited:说明子类可以继承父类中的注解

    package annotation;
    
    import java.lang.annotation.*;
    
    //测试元注解
    public class Test02 {
        @MyAnnotation
        public static void test(){}
    
        public static void main(String[] args) {
            test();
        }
    }
    
    //定义一个注解
    //Target:表示注解可以用在那些地方
    @Target(value = {ElementType.METHOD, ElementType.TYPE})
    //Retention 表示注解在什么地方有效
    @Retention(value = RetentionPolicy.RUNTIME)
    //表示是否将注解生成到JavaDoc中
    @Documented
    //Inherited 子类继承父类的注解
    @Inherited
    @interface MyAnnotation{
    
    }
    

    自定义注解

    • 使用@interface自定义注解,自动继承了java.lang.annotation.Annotation接口
    • 特点:
    1. public @interface注解名{定义内容}

    2. 其中的每一个方法实际上是声明了一个配置参数

    3. 方法的名称就是参数的名称

    4. 返回值类型就是参数的类型,返回值只能是基本类型

    5. 可以通过default来声明参数的默认值

    6. 如果只有一个参数成员,一般参数名为value,传参时可以不写参数名

    7. 注解元素必须要有值,定义注解元素时,经常使用空字符串,0为默认值

    package annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    //自定义注解
    
    public class Test03 {
        //注解可以有默认值,如果没有默认值,必须给注解赋值
        @MyAnnotation2(name = "sml", schools = {"大连理工大学"})
        public static void test2(){}
    
        @MyAnnotation3("sml")
        public static void test3(){
    
        }
        public static void main(String[] args) {
            test2();
            test3();
        }
    }
    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface MyAnnotation2{
        //注解的参数:参数类型 + 参数名 + ()
        String name() default "";
        int age() default 0;
        int id() default -1; //如果默认值为-1,代表不存在
        String[] schools();
    }
    
    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface MyAnnotation3{
        String value();
    }
    
  • 相关阅读:
    Kubernetes实战模拟三(wordpress健康检查和服务质量QoS)
    Kubernetes实战模拟二(wordpress高可用)
    Kubernetes实战模拟一(wordpress基础版)
    Rook部署测试Ceph和wordpress实战应用
    kettle作业转换的执行
    BUU BURP COURSE 1
    BUU SQL COURSE 1
    BUU CODE REVIEW 1
    查看FGC
    Pod大量为Evicted被驱逐状态
  • 原文地址:https://www.cnblogs.com/happysml/p/13871440.html
Copyright © 2011-2022 走看看