当前位置: 首页 > news >正文

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

(3)练习

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

注解:

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

方法类:

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("方法五运行了");}
}

测试类:

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
  • 成员变量:

@Target({ElementType.FIELD})
@interface sign{public String value();
}
  • 类:

@Target({ElementType.TYPE})
@interface sign{public String value();
}
  • 方法

@Target({ElementType.METHOD})
@interface sign{public String value();
}

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

(4)@Retention
  • 源码阶段(默认):注释只在java文件中生效,java文件编译变为class文件后,注解会消失

  • 运行时阶段:java文件编译变为class文件后,注解不会消失

@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在测试的方法后运行

相关文章:

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

目录 一、注解 1.概述 2.作用 3.自定义注解 &#xff08;1&#xff09;格式 &#xff08;2&#xff09;使用 &#xff08;3&#xff09;练习 4.元注解 &#xff08;1&#xff09;概述 &#xff08;2&#xff09;常见元注解 &#xff08;3&#xff09;Target &#x…...

Mac+Android Studio配置 Flutter环境

Fluttrer中文下载官网 Flutter下载官网 1、环境变量 .zshrc #Flutter export PUB_HOSTED_URL"https://pub.flutter-io.cn" export FLUTTER_STORAGE_BASE_URL"https://storage.flutter-io.cn" export FLUTTER_HOME/Users/leon/Flutter/flutter_3_10_4/f…...

架构整洁之道-设计原则

4 设计原则 通常来说&#xff0c;要想构建一个好的软件系统&#xff0c;应该从写整洁的代码开始做起。这就是SOLID设计原则所要解决的问题。 SOLID原则的主要作用就是告诉我们如何将数据和函数组织成为类&#xff0c;以及如何将这些类链接起来成为程序。请注意&#xff0c;这里…...

数据结构(队列)

一.什么是队列 1.队列定义 队列是一种特殊的线性表&#xff0c;特殊之处在于他只允许在表的前端(front)进行删除操作&#xff0c;而在表的后端(rear)进行插入操作。和栈一样&#xff0c;队列也是一种操作受限制的线性表。进行插入操作的一端称为队尾&#xff0c;进行删除操作的…...

docker容器启动后修改或添加端口 nacos容器 版本2.x需要额外开放9848、9849

1.输入docker ps -a查看需要修改的容器ID: 记录下、 docker ps -a 2.停止docker systemctl stop docker 3.进入docker 容器文件夹&#xff0c;找到对应容器的位置&#xff1a; docker的默认文件夹应该是/var/lib/docker 如果不是root用户查看的话&#xff0c;可能会出现权限…...

C语言实现归并排序算法(附带源代码)

归并排序 把数据分为两段&#xff0c;从两段中逐个选最小的元素移入新数据段的末尾。 可从上到下或从下到上进行。 动态效果过程演示&#xff1a; 归并排序&#xff08;Merge Sort&#xff09;是一种分治算法&#xff0c;它将一个数组分为两个子数组&#xff0c;分别对这两个…...

考研C语言刷题基础篇之分支循环结构基础(二)

目录 第一题分数求和 第二题&#xff1a;求10 个整数中最大值 第三题&#xff1a;在屏幕上输出9*9乘法口诀表 第四题&#xff1a;写一个代码&#xff1a;打印100~200之间的素数 第五题&#xff1a;求斐波那契数的第N个数 斐波那契数的概念&#xff1a;前两个数相加等于第三…...

Scala基础知识

scala 1、scala简介 ​ scala是运行在JVM上的多范式编程语言&#xff0c;同时支持面向对象和面向函数式编程。 2、scala解释器 要启动scala解释器&#xff0c;只需要以下几步&#xff1a; 按住windows键 r输入scala即可 在scala命令提示窗口中执行:quit&#xff0c;即可退…...

数学建模-------误差来源以及误差分析

绝对误差&#xff1a;精确值-近似值&#xff1b; 举个例子&#xff1a;从A到B&#xff0c;应该有73千米&#xff0c;但是我们近似成了70千米&#xff1b;从C到D&#xff0c;应该是1373千米&#xff0c;我们近似成了1370千米&#xff0c;如果使用绝对误差&#xff0c;结果都是3…...

Arduino和MPLAB X 开发STM32F103和PIC16F15376

要点&#xff1a; 使用Arduino开发STM32F103&#xff08;Blue Pill&#xff09;&#xff0c;MPLAB X 开发PIC16F15376&#xff08;Curiosity Nano&#xff09;C/C嵌入式开发ESP32(Arduino、ESP-IDF)和STM32实时操作系统FreeRTOS STM32使用FreeRTOS示例 在使用 FreeRTOS 时&a…...

手机操作系统Android

▶1.Android系统概述 Andaid(读[安卓)由Coosle公司和开放手机联盟共同开发&#xff0c;它是基于Lmx内核的开源操作系统。Andtoid主要用于移动设备&#xff0c;如智能手机和平板计算机。2008年发布了第一部Andtoid智能手机&#xff0c;以后Android逐渐扩展到平板计算机、电视、…...

2024年,你是否还在迷茫?

2024年&#xff0c;你是否还在迷茫&#xff1f; 别担心&#xff01;鸿蒙来了&#xff0c;这个未来技术的制高点&#xff0c;为你提供了答案&#xff01; 诸多大厂疯抢、24年预计鸿蒙相关的岗位需求将达到百万级、就业均薪达到19K&#xff0c;全国高校开课…… 种种现象都在表…...

ART: Automatic multi-step reasoning and tool-use for large language models 导读

ART: Automatic multi-step reasoning and tool-use for large language models 本文介绍了一种名为“自动推理和工具使用&#xff08;ART&#xff09;”的新框架&#xff0c;用于解决大型语言模型&#xff08;LLM&#xff09;在处理复杂任务时需要手动编写程序的问题。该框架可…...

Github 2024-01-26 开源项目日报Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-26统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目4Jupyter Notebook项目2HTML项目1Shell项目1Dockerfile项目1非开发语言项目1Go项目1Rust项目1 高级…...

免费的 UI 设计资源网站 Top 8

今日与大家分享8个优秀的免费 UI 设计资源网站。这些网站的资源包括免费设计材料站、设计工具、字体和其他网站&#xff0c;尤其是一些材料站。它们是免费下载的&#xff0c;材料的风格目前很流行&#xff0c;适合不同的项目。非常适合平面设计WEB/UI设计师收藏&#xff0c;接下…...

人机协同对人工智能治理的影响

人机协同对人工智能治理的影响是多方面的。 首先&#xff0c;人机协同可以提供更有效的人工智能监管和治理机制。人工智能系统通常需要大量的数据来训练和运行&#xff0c;而人类在监管和治理方面有独特的能力。通过人机协同&#xff0c;人们可以利用他们的主观意见和专业知识来…...

Form.List的使用,设置某个字段的值

1.Form.Item的name <Form.Itemname{[base_range, company_base_range_start]}dependencies{[[base_range, company_base_range_end]]}rules{[{ required: true, message: 请输入下限 },{validator: (_, value) >validateMoneyRule(value,base_range?.company_base_range…...

React16源码: React中的updateHostComponent的源码实现

updateHostComponent 1 &#xff09;概述 在 completeWork 阶段的 HostComponent 处理&#xff0c;继续前文所述在更新的逻辑里面&#xff0c;调用了 updateHostComponent进行前后props对应的dom的attributes变化的对比情况这个方法也是根据不同环境来定义的&#xff0c;我们这…...

uniapp导入uView组件库

目录 准备工作 1. 新建一个项目 2. 导入uview组件库 3. 关于SCSS 配置步骤 1. 引入uView主JS库 2. 在引入uView的全局SCSS 3. 引入uView基础样式 4. 配置easycom组件模式 添加效果实验运行即可成功 准备工作 1. 新建一个项目 2. 导入uview组件库 在进行配置之前&#x…...

防御保护----防火墙的安全策略、NAT策略实验

实验拓扑&#xff1a; 实验要求&#xff1a; 1.生产区在工作时间&#xff08;9&#xff1a;00-18&#xff1a;00&#xff09;内可以访问DMZ区&#xff0c;仅可以访问http服务器&#xff1b; 2.办公区全天可以访问DMZ区&#xff0c;其中10.0.2.10可以访问FTP服务器和HTTP服务器…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...