• Java-注解知识、整理学习。


    注解和注释

    注解:说明程序的,给计算机看的

    注释:用文字描述程序的,给程序员看的

    注解的概念:

      注解(Annotation),也叫元数据。一种代码级别的说明。他是JDK1.5及以后版本引入的特性。与类、接口、枚举在同一个层次。他可以声明在包、类、字段、方法、局部变量、方法参数等前面,用来对这些元素进行说明、注释。

      ①jdk1.5之后出现的特性

      ②用来说明程序的

      ③使用方法:@注解名称

    作用分类:

         ①编写文档:通过代码里标识的元数据生成文档【生成doc文档】

      ②代码分析:通过代码里标识的元数据对代码进行分析【使用反射】

      ③编译检查:通过代码里标识的元数据让编译器能够实现最基本的编译检查【如Override】    

    Java内置的基本注解:

    • @Override:检测被该注解标注的方法是否是继承自父类(接口)的
    • @Deprecated:该注解标注的内容表示已过时
    • @SuppressWarnings:压制警告 一般传递参数“all”
    • @SafeVarargs:“堆污染”警告。
    • @FunctionalInterface:标注函数式接口,保证这个接口只有一个抽象方法,注意这个只能修饰接口

    自定义注解:

    • 格式:
      • 元注解
      • public @interface 注解名称{
      •        属性列表
      • }
    • 本质:public interface MyAnno extends java.lang.annotation.Annotation{}    注解本质上就是一个接口,继承 java.lang.annotation.Annotation
    • 属性(接口中可以定义的内容(抽象方法,就是注解的属性))
      • 返回值类型      只有以下几种可以: 基本数据类型、String、枚举、注解、以上类型的数组,不能是void、类类型
      • 定义了属性,在使用时需要给属性赋值,如果不想给某个属性赋值,则在定义注解内方法的时候 加default xxx,如:
      • public @interface MyAnno{
            int age();
            String name() default "鲁班七号";        
        }
      • 如果只有一个属性需要赋值且这个属性名为value,则value=可以省略,如@MyAnno("鲁班七号")
      • 枚举赋值:@MyAnno(per=Person.P1)
      • 注解类型赋值:@MyAnno(anno=@Anno2)
      • 数组类型赋值:@MyAnno(strs={"a","b","c"})  数组赋值使用{}包裹。如果数组中只有一个值,则{}可以省略

    元注解:用于描述注解的注解

    @Target:描述注解能作用的位置 。 ElementType的取值:TYPE表示可以作用于类上;METHOD:可以作用于方法上;FIELD:可以作用于成员变量上

      @Target(value={ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})    表示该注解可以作用于类上、方法上、成员变量上

    @Retention:描述注解被保留的阶段  

      RetentionPolicy.RUNTIME(该注解会保留到class字节码文件中,并且被JVM读取。一般取这个值),RetentionPolicy.CLASS(该注解会保留到class字节码文件中,但不会被JVM读取。),RetentionPolicy.SOURCE(不会保留到class字节码文件中)

    @Documented:描述注解是否被抽取到api文档中

    @Inherited:描述注解是否被子类继承

    在程序中解析(使用)我们定义的注解

      获取注解中定义的属性值

      定义注解

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Pro {
        String className();
        String methodName();
    }

      

    @Pro(className = "com.lhj.AnnoTest",methodName = "main")
    public class AnnoTest {
    
        public static void main(String[] args) {
            //获取注解定义的位置对象(class、method、field)
           Class<AnnoTest> annClass=    AnnoTest.class;
           //获取指定注解
           Pro pro=    annClass.getAnnotation(Pro.class);
           //调用注解中的抽象方法获取配置的属性值
           String className=pro.className();
           String methodName=pro.methodName();
           System.out.println(className);
           System.out.println(methodName);
        }
    
    }
  • 相关阅读:
    在Spring中使用cache(EhCache的对象缓存和页面缓存)
    halcon 模板匹配 -- 转化 vector_angle_to_rigid
    halcon 模板匹配 -- find_shape_model
    halcon 模板匹配 -- create_shape_model
    C#快速获取指定网页源码的几种方式,并通过字符串截取函数 或 正则 取指定内容(IP)
    C# Socket通讯 本机多网卡,指定网卡通讯
    C# 获取所有网卡信息
    C#关闭退出线程的几种方法
    C#多线程方法 可传参
    C# Datetime 使用详解
  • 原文地址:https://www.cnblogs.com/gyl5201314/p/13683889.html
Copyright © 2020-2023  润新知