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 在测试的方法后运行
相关推荐
科技资讯早知道7 分钟前
java计算机毕设课设—坦克大战游戏
java·开发语言·游戏·毕业设计·课程设计·毕设
新晓·故知33 分钟前
<基于递归实现线索二叉树的构造及遍历算法探讨>
数据结构·经验分享·笔记·算法·链表
魔理沙偷走了BUG44 分钟前
【数学分析笔记】第4章第4节 复合函数求导法则及其应用(3)
笔记·数学分析
小比卡丘1 小时前
C语言进阶版第17课—自定义类型:联合和枚举
android·java·c语言
xmh-sxh-13141 小时前
java 数据存储方式
java
liu_chunhai1 小时前
设计模式(3)builder
java·开发语言·设计模式
ya888g2 小时前
GESP C++四级样题卷
java·c++·算法
【D'accumulation】2 小时前
令牌主动失效机制范例(利用redis)注释分析
java·spring boot·redis·后端
小叶学C++2 小时前
【C++】类与对象(下)
java·开发语言·c++
2401_854391082 小时前
高效开发:SpringBoot网上租赁系统实现细节
java·spring boot·后端