Java基础进阶03-注解和单元测试

目录

一、注解

1.概述

2.作用

3.自定义注解

(1)格式

(2)使用

(3)练习

4.元注解

(1)概述

(2)常见元注解

(3)@Target

(4)@Retention

二、单元测试

1.概述

2.单元测试工具JUnit

3.JUnit特点

4.JUnit的使用

5.JUnit常用注解


一、注解

1.概述

注解是代码里的特殊标记,程序可以读取注解,一般用于替代配置文件

开发人员可以通过注解告诉类如何运行: 在Java技术里注解的典型应用:可以通过反射技术去得到类里面的注解,来决定怎么去运行类

2.作用

  • 标记(如重写@Override)

  • 约束并检查代码是否符合要求(如重写,代码有问题无法实现重写效果的话会报错)

  • 压制警告信息(如@SuppressWarnings(value = "all")【表示压制所有的警告】)

  • 声明(如@Deprecated,表示过时)

3.自定义注解

(1)格式
java 复制代码
  public @interface 注解名称{
      //属性类型:基本数据类型,String,Class,注解,枚举,以上类型的一维数组
      //特殊属性值Value,我们在使用注解的时候,如果我们只给注解的value属性赋值,那么value=可省略
        public 属性类型 属性名() default 默认值
    }
java 复制代码
public @interface text{
    public String[] STRINGS() ;
}
public @interface text02{
    public String[] value();
}
(2)使用
java 复制代码
//直接在要使用的位置上@注解名即可
//注意:在使用注解的时候如果注解里面的属性没有指定默认值,那么我们就需要手动给出注解属性的设置值。
@text(STRINGS = {"1","2","3"})
public static void main(String[] args) {
​
}

@text02({"1","2","3"})
public static void main(String[] args) {
​
}
复制代码
(3)练习

自定义一个注解(@随意),用于指定类的方法上,如果某一个类的方法上使用了该注解,就执行该方法

注解:

java 复制代码
//表示这个注解的存活时间
@Retention(value = RetentionPolicy.RUNTIME)
@interface sign{
    public String value();
}

方法类:

java 复制代码
public class Methods {
    void method01() {
        System.out.println("方法一运行了");
    }
    @sign("true")
    void method02() {
        System.out.println("方法二运行了");
    }
​
    void method03() {
        System.out.println("方法三运行了");
    }
    @sign("true")
    void method04() {
        System.out.println("方法四运行了");
    }
    @sign("true")
    void method05() {
        System.out.println("方法五运行了");
    }
}

测试类:

java 复制代码
public class NoteDemo {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        //1.通过反射获取Methods类的字节码文件
        Class<Methods> methodsClass = Methods.class;
        //1.1通过无参构造创建对象
        Methods methods1 = methodsClass.getDeclaredConstructor().newInstance();
        //2.获取所有方法对象
        Method[] methods = methodsClass.getDeclaredMethods();
        //3.遍历方法
        for (Method method : methods) {
            //判断是否有注解,参数是注解的字节码文件
            //isAnnotationPresent(类<? extends Annotation> annotationClass)
            if (method.isAnnotationPresent(sign.class)) {
                method.invoke(methods1);
            }
        }
​
    }
}

4.元注解

(1)概述

描述元注解的注解(写在注解上面的注解)

(2)常见元注解
元注解名 说明
@Target 指定了注解能在哪里使用(成员变量,类,方法)
@Retention 注解保留时间(声明周期)【不写默认是源码阶段】
@Inherited 表示修饰的自定义注解可以被子类继承
@Documented 表示该自定义注解,会出现在API文档里面
(3)@Target
  • 成员变量:
java 复制代码
@Target({ElementType.FIELD})
@interface sign{
    public String value();
}
  • 类:
java 复制代码
@Target({ElementType.TYPE})
@interface sign{
    public String value();
}
  • 方法
java 复制代码
@Target({ElementType.METHOD})
@interface sign{
    public String value();
}

如果是多个参数,用,隔开

(4)@Retention
  • 源码阶段(默认):注释只在java文件中生效,java文件编译变为class文件后,注解会消失
  • 运行时阶段:java文件编译变为class文件后,注解不会消失
java 复制代码
@Retention(value = RetentionPolicy.RUNTIME)
@interface sign{
    public String value();
}

二、单元测试

1.概述

单元测试是对单个代码模块的正确性的测试

2.单元测试工具JUnit

JUnit是一个Java编程语言的单元测试工具。JUnit是一个非常重要的测试工具。

3.JUnit特点

  • JUnit是一个开放源代码的测试工具

  • 提供注解来识别测试方法

  • JUnit测试可以让你编写代码更快,并能提高质量JUnit 优雅简洁。没那么复杂,花费时间较少

  • JUnit 在一个条中显示进度。如果运行良好则是绿色,如果运行失败,则变成红色

4.JUnit的使用

  • 将JUnit的jar包导入到工程中(前面有教程,后续就不讲了)

  • 编写测试方法:该测试方法必须是公共的无参数无返回值的非静态方法

  • 在测试方法上使用@Test注解标注该方法是一个测试方法

  • 选中测试方法右键通过junit运行该方法

首先下一个包,我用的是junit-4.13.2

测试一下

报错了,看一下异常信息,少导了一个jar包,去下载一个

问题解决~

5.JUnit常用注解

注解名称 说明
@Test 表示测试该方法
@Before 在测试的方法前运行
@After 在测试的方法后运行
相关推荐
憨子周1 小时前
2M的带宽怎么怎么设置tcp滑动窗口以及连接池
java·网络·网络协议·tcp/ip
霖雨2 小时前
使用Visual Studio Code 快速新建Net项目
java·ide·windows·vscode·编辑器
SRY122404192 小时前
javaSE面试题
java·开发语言·面试
Fiercezm3 小时前
JUC学习
java
2401_858286113 小时前
L7.【LeetCode笔记】相交链表
笔记·leetcode·链表
无尽的大道3 小时前
Java 泛型详解:参数化类型的强大之处
java·开发语言
ZIM学编程3 小时前
Java基础Day-Sixteen
java·开发语言·windows
我不是星海3 小时前
1.集合体系补充(1)
java·数据结构
P.H. Infinity3 小时前
【RabbitMQ】07-业务幂等处理
java·rabbitmq·java-rabbitmq
爱吃土豆的程序员3 小时前
java XMLStreamConstants.CDATA 无法识别 <![CDATA[]]>
xml·java·cdata