文章目录

  • 一:Junit单元测试
    • 测试分类:
    • Junit的使用
    • @Before_@After
  • 二:注解
      • 什么是注解
      • 文档相关的注解
      • IDEA中的javadoc使用:
      • JDK内置的3个注解
      • 自定义注解
    • 元注解
      • @Retention
      • @Target
      • @Repeatable
      • @Documented(用的很少)
      • @Inherited(用的极少)
  • 三:枚举
    • enum关键字定义枚举类
    • Enum;类的常用方法
    • 枚举类实现接口
    • 枚举的应用

一:Junit单元测试

测试分类:

(1)黑盒测试:
软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试。
(2)白盒测试:—》Junit属于白盒测试。
软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序的所有逻辑路径进行测试,通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试。

Junit的使用

1.一般测试和业务做一个分离,分离为不同的包
2.测试类的名字:****Test —>见名知意
3.测试方法的定义–》这个方法可以独立运行,不依托于main方法
4.测试方法定义完以后,不能直接就独立运行了,必须要在方法前加入一个注解: @Test
5.导入Junit的依赖的环境
代码可能程序上没异常但逻辑上有问题,判定结果依旧为绿色但不代表测试通过所以我们要加入断言: Assert.assertEquals()
第一个参数预测结果,第二个参数实际结果
测试类代码

public class Calclatortest {Calculator cal=new Calculator();@Testpublic void Testadd(){int result=cal.add(1,4);//加入断言:预测一下结果,判断一下我预测的结果和 实际的结果是否一致:Assert.assertEquals(5,result);}@Testpublic void Testsub(){int ans=cal.sub(5,1);Assert.assertEquals(4,ans);}
}

@Before_@After

@Before:
某一个方法中,加入了@Before注解以后,那么这个方法中的功能会在测试方法执行前先执行
一般会在@Beforer修饰的那个方法中加入一些申请资源的代码:申请数据库资源,申请IO资源,申请网络资源

@After:
某一个方法中,加入了@After注解以后,那么这个方法中的功能会在测试方法执行后先执行
一般会在@After修饰的那个方法中加入释放资源的代码:释放数据库资源,释放IO资源,释放网络资源
用法

 @Beforepublic void init(){System.out.println("开始测试");}@Afterpublic void close(){System.out.println("结束测试");}

二:注解

什么是注解

1.在编译,类加载,运行时被读取,并执行相应的处理。通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
2.一定程度上可以说 :框架=注解+反射+设计模式

文档相关的注解

在这里插入图片描述
@param @return和@exception这三个标记都是只用于方法的。
@param的格式要求: @param 形参名 形参类型 形参说明
@return的格式要求: @return 返回值类型返回值说明,如果方法的返回值类型是void就不能写
@exception的格式要求: @exception 异常类型异常说明
@param和@exception可以并列多个

IDEA中的javadoc使用:

!](https://i-blog.csdnimg.cn/direct/b949c0250e82466ea0e25ca1a6682734.png)

在画圈处输入上述文字可以防止乱码

JDK内置的3个注解

1.@Override:限定重写父类方法,该注解只能用于方法
作用:限定重写的方法,只要重写方法有问题,就有错误提示。
2.@Deprecated:用于表示所修饰的元素(类,方法,构造器,属性等)已过时。通常是因为所修饰的结构危险或存在更好的选择
在方法前加入@Deprecated,这个方法就会变成一个过时方法
3.@SuppressWarnings:抑制编译器警告
作用:若编译器警告这一代码,可以加入@SuppressWarnings使其不触发警告

自定义注解

1.创建java注解
在这里插入图片描述@interface,跟接口没有一点关系
2.注解的内部: 以@SuppressWarnings为例,发现内部:
在这里插入图片描述
实际上:
value()是属性,不是方法
String[]是无参数方法(成员变量)的类型
无参数方法的类型:基本数据类型(八种),String,枚举,注解类型,还可以是以上类型对应的数组
参数叫做:配置参数
3.使用注解
如果定义了配置参数那么使用时必须给配置参数赋值
在这里插入图片描述
如果在定义配置参数时已经给其赋值了那么使用的时候无需传值
赋值操作:
在这里插入图片描述
内部没有定义配置参数的注解可以叫做标记
内部定义了配置参数的注解叫做元数据

元注解

元注解是用于修饰其它注解的注解

@Retention

作用:指定 修饰的那个注解的生命周期
@Rentention包含一个RetentionPolicy枚举类型的成员变量,使用@Rentention时必须为该value成员变量指定值:
(1)RetentionPolicy.SOURCE:在源文件中有效
(2)RetentionPolicy.CLASS:在class文件中有效,保留在.class文件中,但是当运行Java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解
(3)RetentionPolicy.CLASS:在class文件中有效(即class保留),保留在.class文件中,但是当运行Java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解
如果注解没有加Retention元注解,那么相当于默认的注解是.CLASS的状态

@Target

作用:被修饰的注解能用于修饰哪些程序元素

@Target也包含一个名为value的成员变量
给配置参数赋值:
1.TYPE,代表可以修饰类
2.METHOD,代表可以修饰方法
3.更多的可以去@Target的源码里面找
annotation

@Target({TYPE, METHOD})
public @interface annotation {
}

我们给配置参数复制了TYPE和METHOD使annotation注解只可以修饰类和方法,但属性和构造器不可修饰
在这里插入图片描述
注意: 记得导包

@Repeatable

作用:被该元注解修饰的注解 可以重复的修饰同一个位置

@Documented(用的很少)

作用:被该元注解修饰的注解类将被javadoc工具提取成文档。默认情况下,javadoc不包括注解

@Inherited(用的极少)

作用:如果某个类使用了被 @Inherited修饰的注解,则其子类将自动具有该注解

三:枚举

enum关键字定义枚举类

public enum Season {//必须将对象放在最开始的位置SPRING("春天","春暖花开"),SUMMER("夏天","烈日炎炎"),AUTUMN("秋天","硕果累累"),WINTER("冬天","冰天雪地");private final String SeasonName;//季节名称private final String SeasonDesc;//季节描述//构造器私有化,外界不能调用这个构造器,只能Season内部自己调用private Season(String SeasonName,String SeasonDesc){this.SeasonName=SeasonName;this.SeasonDesc=SeasonDesc;}public String getSeasonDesc() {return SeasonDesc;}public String getSeasonName() {return SeasonName;}@Overridepublic String toString() {return "Season{" +"SeasonName='" + SeasonName + '\'' +", SeasonDesc='" + SeasonDesc + '\'' +'}';}
}

测试类

public class Test1 {public static void main(String[] args) {Season winter = Season.WINTER;System.out.println(winter);}
}

SPRING(“春天”,“春暖花开”),
SUMMER(“夏天”,“烈日炎炎”),
AUTUMN(“秋天”,“硕果累累”),
WINTER(“冬天”,“冰天雪地”);

这样写省略了public static final Season SPRING = new Season(“春天”,“春暖花开”);

我们可以看到 Season类中重写了toString方法所以我们输出的结果是
在这里插入图片描述
现在我们将Season类中的同String方法去掉
依旧运行Test类输出的结果是
在这里插入图片描述
因为enum的上层父类不是Object而是java.lang.Enum

Enum;类的常用方法

1.toString():获取对象的名字
2.values: 返回枚举类对象的数组
3.valueOf:通过对象名字获取这个枚举对象

枚举类实现接口

接口

public interface ii {void show();
}

Season类

public enum Season implements ii{SPRING,SUMMER,AUTUMN,WINTER;@Overridepublic void show() {System.out.println("这是春天");}
}

Test类

public class Test {public static void main(String[] args) {Season spring = Season.SPRING;spring.show();Season winter = Season.WINTER;winter.show();}
}

输出结果:
在这里插入图片描述

我们发现上面 所有的枚举对象,调用这个show方法的时候走的都是同一个方法,结果都一样
我们想要不同的对象调用的show方法不同
改进后的Season类

public enum Season implements ii{SPRING{public void show() {System.out.println("这是春天");}},SUMMER {public void show() {System.out.println("这是夏天");}},AUTUMN {public void show() {System.out.println("这是春秋天");}},WINTER {public void show() {System.out.println("这是冬天");}};
}

这样子就可以达到我们的目的

枚举的应用

1.可以在入口处对参数进行限制
例如:性别只有“男”和“女”种,所以我们可以使用enum来对设置性别的参数进行限制
Person类

public class Person {private Gender sex;public Gender getSex() {return sex;}public void setSex(Gender sex) {this.sex = sex;}
}

Gender类

public enum Gender {,;
}

Test类
在这里插入图片描述在这里插入图片描述
我们发现只要set方法传入的不是“男”或”女“就会报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912596.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912596.shtml
英文地址,请注明出处:http://en.pswp.cn/news/912596.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将N8N配置为服务【ubuntu】

docker模式不在此讨论。这里讨论的是node安装为n8n后,如何安装为服务: 安装NODE(略) 安装N8N 一个命令解决: npm install n8n -g 安装服务 vi /etc/systemd/system/n8n.service内容如下 [Unit] Descriptionn8…

Java后端调用外部接口标准流程详解

在Java后端开发中,调用外部HTTP接口(如第三方平台API、云服务、微服务等)是非常常见的需求。实现这个功能通常遵循一套标准的流程: 1. 准备DTO类(数据传输对象) 作用: DTO(Data Tra…

星火燎原 数智新生 —— 《GB/T 45341—2025》 × AI大模型 × 全域PaaS创新,领码SPARK打造行业数字化转型新范式

【摘要】 数字中国新征程,标准引航数智化。面对企业数字蝶变的关键关口,《GB/T 45341—2025 数字化转型管理 参考架构》引领行业规范发展。爱分析最新数据显示,中国iPaaS市场规模持续高增长,印证PaaS已成为企业数字化基石。 AI大…

25-7-1 论文学习(1)- Fractal Generative Models 何恺明大佬的论文

分形生成模型 Tianhong Li1 Qinyi Sun1 Lijie Fan2 Kaiming He1 摘要 模块化是计算机科学的基石,它将复杂函数抽象为原子构建块。在本文中,我们通过将生成模型抽象为原子生成模块,引入了新的模块化层次。类似于数学中的分形,我…

如何读取运行jar中引用jar中的文件

1.问题发现 项目中有个common包资源文件,然后springboot项目引用了common,那么我们要怎么读取这个资源了。这里需要考虑三个场景,idea运行时、common jar独立运行时、springboot引用common后运行时。 2.问题解决 2.1.idea运行时 Protection…

【学习方法】框架质疑学习法:破解专业学习的“知识厚度”困境

今天博主给大家分享一个,我自己发明了一个比较高效的学习方法,名叫“框架质疑学习法” 本文提出的框架质疑学习法(Framework Questioning Learning Method)为本文作者,也就是我,董翔首次提出。 在软件专业的学习中&a…

spring-ai 1.0.0 学习(十七)——MCP Client

之前学过了工具调用(spring-ai 1.0.0 学习(十二)——工具调用_springai 1.0 如何判断调用哪一个tool工具-CSDN博客),今天来看一下MCP MCP是什么 MCP全称是模型上下文协议,有点绕,通俗点理解&a…

Git 运行.sh文件

1.在项目文件中右击 Open Git Bash here 显示(base)环境 2.激活conda环境 3.复制.sh文件的相对路径 4.将路径复制到git终端 先输入sh和空格,然后右击后选paste,不要直接ctrl v 5.开始运行

MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别?

MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别? 主要解答详细解答1. **聚簇索引(Clustered Index)**2. **非聚簇索引(Non-Clustered Index / Secondary Index)**3. **对比总结**4. **流程图(查询过…

[2025CVPR]DE-GANs:一种高效的生成对抗网络

目录 引言:数据高效GAN的困境 核心原理:动态质量筛选机制 1. 判别器拒绝采样(DRS)的再思考 2. 质量感知动态拒绝公式 (1)质量感知阶段 (2)动态拒绝阶段 模型架构:轻量化设计 技术突破:三大创新点 1. 首创训练阶段DRS 2. 动态拒绝机制 3. 质量重加权策略 …

[面试] 手写题-数组转树

示例数据: const arr [{ id: 1, parentId: null, name: Root },{ id: 2, parentId: 1, name: Child 1 },{ id: 3, parentId: 1, name: Child 2 },{ id: 4, parentId: 2, name: Grandchild 1 }, ]目标生成: const tree [{id: 1,name: Root,children: …

CertiK《Hack3d:2025年第二季度及上半年Web3.0安全报告》(附报告全文链接)

CertiK《Hack3d:2025年第二季度及上半年Web3.0安全报告》现已发布,报告显示:仅2025年上半年,因安全事件导致的损失接近25亿美元;截至目前,总损失已超过去年全年水平。整体来看,Web3.0安全形势依…

反向传播 梯度消失

反向传播 backpropagation 反向传播(Backpropagation) 是神经网络训练中的一种核心算法,用于通过计算误差并将其传播回网络,从而更新神经网络的参数。通过反向传播,网络能够在每次迭代中逐步调整其参数(例…

京东外卖服务商加入方案对比!选择本地生活服务商系统的优势,到底在哪?

自入局之日起,京东外卖似乎就一直热衷于给人惊喜: 先是在上线时规定了“2025年5月1日前入驻的商家,全年免佣金”和“仅限品质堂食商家入驻”; 再是宣布了要为外卖骑手缴纳五险一金,并承担其中的所有成本;…

【RTSP从零实践】4、使用RTP协议封装并传输AAC

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

Bootstrap 安装使用教程

一、Bootstrap 简介 Bootstrap 是一个开源的前端框架,由 Twitter 开发,旨在快速开发响应式、移动优先的 Web 页面。它包含 HTML、CSS 和 JavaScript 组件,如按钮、导航栏、表单等。 二、Bootstrap 安装方式 2.1 使用 CDN(推荐入…

Java学习第二部分——基础语法

目录 一.数据类型 (一)数值类型(用于存储数字,包括整数和浮点数) 1. **整数类型** 2. **浮点类型** (二)非数值类型(非数值类型用于存储非数字数据) 1. **char** 2…

Redis分布式锁核心原理源码

文章目录 概述一、Redis实现分布式锁1.1、第一版1.2、第二版1.3、第三版1.3、第四版 二、Redisson实现分布式锁核心源码分析2.1、加锁核心源码2.2、锁续期核心源码2.3、重试机制核心源码2.4、解锁核心源码 总结 概述 传统的单机锁(Synchronized,Reentran…

关于vue2使用elform的rules校验

在使用vue2开发项目的时候使用element组件的el-form大多数情况都需要用到必填项校验 举个栗子&#xff1a; <el-form :model"ruleForm" :rules"rules" ref"ruleForm" label-width"100px" class"demo-ruleForm"><e…

langchain从入门到精通(二十六)——RAG优化策略(四)问题分解策略提升负责问题检索准确率

1. LangChain 少量示例提示模板 在与 LLM 的对话中&#xff0c;提供少量的示例被称为 少量示例&#xff0c;这是一种简单但强大的指导生成的方式&#xff0c;在某些情况下可以显著提高模型性能&#xff08;与之对应的是零样本&#xff09;&#xff0c;少量示例可以降低 Prompt…