• 注解(Annotation)基础


    注解(Annotation):

    Java注解用于为Java代码提供元数据,作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的;

    1、概述:

    class interface 一样,注解也是一种类型,是在java5中引入的;

    2、定义:

    通过@interface关键字进行定义,使用在类、方法、属性上等

    public @interface TestAnnotation{}
    
    • 1

    3、元注解:

    可以注解到注解上的注解;
    @Retention@Documented@Target@Inherited@Repeatable

    4、@Retention:结束说明被注释的注解的存活时间;

    RetentionPolicy.SOURCE:只在源码阶段保留,编译时丢弃;
    RetentionPolicy.CLASS(默认):在编译阶段写入字节码文件,不会加载到JVM中;
    RetentionPolicy.RUNTIME:在编译阶段写入字节码文件,会加载到JVM中,在程序运行中可以获取到它们;
    
    • 1
    • 2
    • 3

    5、@Documented:和文档相关,将注解中的元素包含到Javadoc中去;

    6、@Target:指定注解运用的范围,如果没有@Target注解,该注解就可用于任何程序元素之上;

    ElementType.ANNOTATION_TYPE:可以给一个注解注解;
    ElementType.CONSTRUCTOR:可以给构造方法注解;
    ElementType.FIELD:可以给属性注解;
    ElementType.LOCAL_VARIABLE:可以给本地变量注解;
    ElementType.METHOD:可以给方法注解;
    ElementType.PACKAGE:可以给包注解;
    ElementType.PARAMETER:可以给方法内的参数注解;
    ElementType.TYPE:可以给一个类型注解;
    ElementType.TYPE_PARAMETER:该注解写在类型变量的声明语句中;
    ElementType.TYPE_USE:该注解能写到使用类型的任何语句中;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7、@Inherited:继承,如果一个超类使用了@Inherited注解过的注解,如果他的子类没有任何注解应用的话,那么该子类继承超类的注解;

    8、@Repeatable:可重复,注解的值可以同时取多个;

    9、注解的属性:

    注解只有成员变量没有方法,注解的成员变量在注解的定义中以无形参的方法形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型;

    10、预置注解:

    @Deprecated:标记已过时的元素,在编译阶段就会发出警告;
    @Override:重写;
    @SuppressWarnings:阻止警告,添加属性对应具体的警告;
    @SafeVarargs:参数安全类型注解,提醒开发者不要用参数做一些不安全的操作,阻止编译器发生unchecked这样的警告
    @Functionallnterface:函数式接口
    
    • 1
    • 2
    • 3
    • 4
    • 5

    11、注解与反射:

    要想正确的识别检阅注解需要用到反射;

    • 类注解示例:
      • 1、首先可以通过Class对象的isAnnotationPresent()方法判断它是否应用了某个注解;
      • 2、通过getAnnotation() 方法获取指定类型的注解对象 或者 根据getAnnotations() 获取元素上所有的注解;
      • 3、如果获取到的Annotation不为null,就可以调用属性方法;

    12、注解的使用场景:给编译器或者APT使用的

    • 提供信息给编译器:编译器可以利用注解来探测错误和警告信息;
    • 编译阶段时的处理:软件工具可以利用注解信息生成代码、文档或者做其他处理;
    • 运行时的处理:某些注解可以在程序运行时接受代码的提取;

    注解无法改变代码本身,注解是指某些工具的工具;

    APT:当开发者使用Annotation修饰类、方法等成员之后,这些Annotation不会自己生效,必须由开发者提供相应的代码读取并处理Annotation信息,这些处理提取和处理Annotation的代码被称为Annotation Processing Tool

    13、junit单元测试:

    • 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值;
    • 白盒测试:需要写代码的,关注程序具体的执行流程;

    junit使用白盒测试;

    步骤:
    1、定义一个测试类;
    2、定义测试方法,可以独立运行;
    3、给方法添加@Test注解;
    4、导入Junit依赖环境;
    红色失败,绿色成功;
    断言处理 Assert.assertEquals(期望的结果,运算结果)
    @Before:修饰的方法会在测试方法执行之前执行;
    @After:修饰的方法会在测试方法执行之后执行;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    总结:好好学习基础,冲鸭!!!

  • 相关阅读:
    【论文笔记】—低照度图像增强—Supervised—RetinexNet—2018-BMVC
    综合应用QGIS软件,实现商场选址分析
    jsp三好学生评审管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
    面试题:在大型分布式系统中,给你一条 SQL,让你优化,你会怎么做?
    【初学者入门C语言】之运算符及表达式(二)
    java-net-php-python-jsp无锡尚客优酒店客房管理信息系统mp4计算机毕业设计程序
    基础 | 并发编程 - [导论 & volatile]
    (29)Blender源码分析之顶层菜单的system菜单分析
    《Vue.js+Spring Boot全栈开发实战》简介
    ES: export 的用法
  • 原文地址:https://blog.csdn.net/weixin_44396684/article/details/125485570