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

【潜意识Java】深入详细理解分析Java中的toString()方法重写完整笔记总结,超级详细。

目录

一、toString() 方法是啥?

(一)默认的 toString() 方法

(二)toString() 方法的作用

二、为啥要重写 toString() 方法?

(一)提高代码的可读性

(二)方便调试

三、如何重写 toString() 方法?

(一)重写的规则

(二)代码示例

四、toString() 方法重写的最佳实践

(一)包含关键属性信息

(二)保持格式的一致性和简洁性

(三)考虑对象的嵌套关系

五、toString() 方法与其他方法的配合使用

(一)与 equals() 和 hashCode() 方法的关系

(二)在日志记录中的应用

53d23192fb924f4390623c30f19b948f.jpeg

宝子们,今天咱要好好唠唠 Java 里一个看似不起眼,但实则用处很大的知识点 ——toString() 方法的重写。在 Java 的世界中,当我们想要直观地了解一个对象的信息时,toString() 方法就派上用场了。不过呢,默认的 toString() 方法有时候可能不太能满足我们的需求,这时候就需要对它进行重写啦。

一、toString() 方法是啥?

(一)默认的 toString() 方法

每个 Java 类都默认继承自 java.lang.Object 类,而 Object 类中就有这个 toString() 方法。当我们创建一个对象,然后直接打印这个对象时,实际上调用的就是它的 toString() 方法。比如说:

认真学哦,掌握这些知识,就像看小说一样,你会越来越强大。

class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public static void main(String[] args) {Person person = new Person("张三", 25);// 这里直接打印 person 对象,会调用其 toString() 方法System.out.println(person);}
}

在这个例子中,如果我们没有重写 toString() 方法,打印出来的结果可能是类似 Person@15db9742 这样一串不太好理解的字符串,这其实是对象的默认哈希码表示形式,对于我们了解对象的具体内容没啥太大帮助。

(二)toString() 方法的作用

toString() 方法的主要作用就是返回一个能代表对象状态的字符串。当我们在调试程序或者需要将对象的信息以一种可读的方式展示出来时,它就非常重要了。比如在日志记录中,我们可能需要记录某个对象的详细信息,这时候一个合适的 toString() 方法就能让我们快速了解对象的各个属性值,而不是看到一堆乱码一样的哈希码。

二、为啥要重写 toString() 方法?

(一)提高代码的可读性

想象一下,我们在一个大型项目中,有很多地方都需要打印对象的信息来进行调试或者查看数据的状态。如果不重写 toString() 方法,看到的都是那些默认的哈希码,根本不知道对象里面到底存了些啥数据。但如果我们重写了 toString() 方法,就可以按照我们想要的格式返回对象的属性信息,比如对于一个 Student 对象,我们可以让 toString() 方法返回 “学生姓名:[具体姓名],年龄:[具体年龄],成绩:[具体成绩]” 这样清晰明了的字符串,这对于我们快速了解学生对象的情况就非常方便,大大提高了代码的可读性。

(二)方便调试

在调试程序的时候,我们经常需要查看各种对象的状态,看看数据是否正确地被赋值和修改。如果能够通过重写 toString() 方法,将对象的关键属性信息以一种直观的方式展示出来,那么在调试过程中就能更快地发现问题所在。比如在一个电商系统中,对于一个 Order 对象,重写 toString() 方法返回订单号、商品列表、总价等信息,当出现订单问题时,我们可以很容易地通过打印 Order 对象来查看这些关键信息,从而更快地定位和解决问题。

三、如何重写 toString() 方法?

(一)重写的规则

  • 方法签名:必须和 Object 类中的 toString() 方法签名完全一致,也就是 public String toString()。这是 Java 重写方法的基本规则,保证了在运行时能够正确地调用子类重写后的方法。
  • 返回值:返回一个字符串,这个字符串要能够准确地描述对象的状态。通常我们会将对象的各个属性值以一种合理的格式组合成一个字符串返回。
  • 访问权限:一般将其声明为 public,这样在任何需要使用该对象的地方都能够方便地调用 toString() 方法获取对象的信息。

(二)代码示例

class Book {private String title;private String author;private double price;public Book(String title, String author, double price) {this.title = title;this.author = author;this.price = price;}// 重写 toString() 方法@Overridepublic String toString() {return "Book{" +"title='" + title + '\'' +", author='" + author + '\'' +", price=" + price +'}';}public static void main(String[] args) {Book book = new Book("Java 编程思想", "Bruce Eckel", 89.9);// 现在打印 book 对象,会调用重写后的 toString() 方法,输出详细的书籍信息System.out.println(book);}
}

在这个例子中,我们重写了 Book 类的 toString() 方法,将书籍的标题、作者和价格等属性以 “Book {title='[具体标题]', author='[具体作者]', price=[具体价格]}” 的格式返回。这样,当我们打印 Book 对象时,就能清晰地看到书籍的详细信息,而不是那个让人摸不着头脑的默认哈希码。

四、toString() 方法重写的最佳实践

(一)包含关键属性信息

在重写 toString() 方法时,要确保包含对象的关键属性信息,这些信息能够完整地描述对象的状态。比如对于一个 Employee 类,除了员工的姓名、年龄等基本信息外,如果员工还有职位、部门等重要属性,也应该包含在 toString() 方法返回的字符串中,这样才能在查看员工对象信息时全面了解其情况。

class Employee {private String name;private int age;private String position;private String department;public Employee(String name, int age, String position, String department) {this.name = name;this.age = age;this.position = position;this.department = department;}@Overridepublic String toString() {return "Employee{" +"name='" + name + '\'' +", age=" + age +", position='" + position + '\'' +", department='" + department + '\'' +'}';}
}

(二)保持格式的一致性和简洁性

  • 一致性:如果一个项目中有多个类都重写了 toString() 方法,尽量保持格式的一致,这样在查看不同对象的信息时,能够更加清晰地进行对比和分析。例如,都采用 “类名 {属性 1 = 值 1, 属性 2 = 值 2,...}” 这样的格式,让开发者能够快速适应和理解每个类的 toString() 方法返回的信息结构。
  • 简洁性:不要在 toString() 方法中返回过于复杂或者冗长的字符串,要突出重点,只包含必要的属性信息。避免在方法中进行复杂的计算或者逻辑处理,因为 toString() 方法的主要目的是提供对象的简要信息,而不是执行复杂的业务逻辑。

(三)考虑对象的嵌套关系

如果一个对象中包含其他对象作为属性,比如一个 Order 类中包含多个 Item 对象(代表订单中的商品项),在重写 Order 类的 toString() 方法时,要考虑如何合理地展示这些嵌套对象的信息。可以采用简洁的方式,比如只显示每个 Item 对象的关键信息(如商品名称和数量),或者提供一个方法让用户可以进一步查看 Item 对象的详细信息,而不是在 Order 的 toString() 方法中展开所有的嵌套对象细节,导致字符串过于复杂难以阅读。

class Item {private String name;private int quantity;public Item(String name, int quantity) {this.name = name;this.quantity = quantity;}@Overridepublic String toString() {return "Item{" +"name='" + name + '\'' +", quantity=" + quantity +'}';}
}class Order {private List<Item> items;public Order(List<Item> items) {this.items = items;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder("Order{");for (Item item : items) {sb.append(item.toString()).append(", ");}if (sb.length() > "Order{".length()) {sb.setLength(sb.length() - 2);}sb.append('}');return sb.toString();}
}

在这个例子中,Order 类的 toString() 方法通过循环将每个 Item 对象的 toString() 方法返回的字符串连接起来,展示了订单中包含的商品项信息,既简洁又能让用户对订单的内容有一个大致的了解。

五、toString() 方法与其他方法的配合使用

(一)与 equals() 和 hashCode() 方法的关系

在 Java 中,当我们重写 equals() 方法来判断两个对象是否相等时,通常也需要重写 hashCode() 方法,以保证对象在哈希表中的正确存储和查找。而 toString() 方法也可以与这两个方法配合使用,提供更全面的对象比较和信息展示功能。
例如,如果两个 Person 对象的 equals() 方法判断它们的姓名和年龄都相等,那么它们的 hashCode() 方法应该返回相同的值,并且它们的 toString() 方法返回的信息也应该能够反映出这种相等关系,让开发者在调试和查看对象信息时能够更加清晰地理解对象的状态和相等性判断逻辑。

class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass()!= o.getClass()) return false;Person person = (Person) o;return age == person.age && Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}

(二)在日志记录中的应用

在进行日志记录时,toString() 方法可以与日志框架(如 Log4jSlf4j 等)配合使用,方便地记录对象的详细信息。例如:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class LoggingExample {private static final Logger logger = LoggerFactory.getLogger(LoggingExample.class);public static void main(String[] args) {Person person = new Person("李四", 30);// 使用日志框架记录 Person 对象的信息,会自动调用 toString() 方法logger.info("创建了新的 Person 对象:{}", person);}
}

在这个例子中,当我们使用日志框架记录 Person 对象时,toString() 方法会被自动调用,将对象的信息以一种可读的方式记录到日志中,方便后续查看和分析程序的运行状态。

宝子们,toString() 方法的重写虽然看起来不是很难,但在实际的 Java 编程中却有着重要的作用,能够大大提高我们代码的可读性、调试效率以及与其他方法和框架的配合效果。希望通过这篇文章,大家都能掌握 toString() 方法重写的技巧和最佳实践,写出更加优秀的 Java 代码。如果在学习过程中还有什么疑问或者想要深入探讨的地方,随时回来看看这篇文章,或者查阅更多的相关资料哦。

3744227198204a6189b6b3995a3f467b.jpeg

 

相关文章:

【潜意识Java】深入详细理解分析Java中的toString()方法重写完整笔记总结,超级详细。

目录 一、toString() 方法是啥&#xff1f; &#xff08;一&#xff09;默认的 toString() 方法 &#xff08;二&#xff09;toString() 方法的作用 二、为啥要重写 toString() 方法&#xff1f; &#xff08;一&#xff09;提高代码的可读性 &#xff08;二&#xff09;…...

仙盟系统开发——启动app失败

var 返回 仙盟使者.Cyber_CallApp(VOAPP, 命令, 携带);...

使用ArcGIS Pro自带的Notebook计算多个遥感指数

在之前的分享中&#xff0c;我们介绍了如何使用ArcPy将GEE下载的遥感影像转为单波段文件。基于前面创建的单波段文件&#xff0c;我们可以一次性计算多种遥感指数&#xff0c;例如NDVI、EVI、NDSI等。我这里直接在ArcGIS Pro中自带的Notebook进行的运行。如下图所示&#xff0c…...

深入Android架构(从线程到AIDL)_认识进程(Process)与IPC架构02

3、 设定IPC通信 -- 使用AndroidManifest.xml文件 在Android框架里&#xff0c;一个应用(程序)套件(Application Package)通常含有多个Java类(Class)&#xff0c;这些类可以在同一个进程(Process)里执行&#xff1b;也可以在不同的进程里执行 。通常&#xff0c;一个进程…...

在K8S中,节点状态哪个组件负责上报?

在Kubernetes中&#xff0c;节点状态是kubelet组件负责定期上报的。Kubelet是运行在每个节点上的代理程序&#xff0c;它与Kubernetes Master节点上的控制面板组件紧密协作&#xff0c;以确保节点上的Pod能够正确运行。 kubelet的主要职责之一就是&#xff1a;与Kubernetes API…...

AI 神经网络在智能家居场景中的应用

在科技持续进步的当下&#xff0c;智能家居领域正经历着深刻变革&#xff0c;AI 神经网络技术的融入成为推动这一变革的关键力量&#xff0c;为家居生活带来了诸多显著变化与提升&#xff0c;本文将几种常见的AI算法应用做了一下总结&#xff0c;希望对物联网从业者有所帮助。 …...

C++基础:SGI STL二级空间配置器内存池

2024/12/14-2024/12/ &#xff1a; 这篇稍微写一下阅读SGI STL内存池的收获。 reference: [1] 深度剖析SGI STL二级空间配置器内存池源码 [2] C内存管理&#xff1a;new / delete 和 cookie [3] 侯捷 内存管理 文章目录 一、写在前面二、二级空间配置器解读2.1 从 malloc 和 fr…...

Python简介

Python 是一种高级编程语言&#xff0c;以其简洁易读的语法和强大的功能而广受欢迎。以下是对 Python 的详细简介&#xff1a; python官网&#xff1a;https://www.python.org/ python中文官网&#xff1a;Python中文网 官网 历史与起源‌&#xff1a; Python 由荷兰人 Guido…...

Linux之ARM(MX6U)裸机篇----7.蜂鸣器实验

一&#xff0c;蜂鸣器模块 封装步骤&#xff1a; ①初始化SNVS_TAMPER这IO复用为GPIO ②设置SNVS_TAMPPER这个IO的电气属性 ③初始化GPIO ④控制GPIO输出高低电平 bsp_beep.c: #include "bsp_beep.h" #include "cc.h"/* BEEP初始化 */ void beep_init…...

手机实时提取SIM卡打电话的信令声音-双卡手机来电如何获取哪一个卡的来电

手机实时提取SIM卡打电话的信令声音 --双卡手机来电如何获取哪一个卡的来电 一、前言 前面的篇章《手机实时提取SIM卡打电话的信令声音-智能拨号器的双SIM卡切换方案》中&#xff0c;我们论述了局域网SIP坐席通过手机外呼出去时&#xff0c;手机中主副卡的呼叫调度策略。 但…...

GPU 进阶笔记(一):高性能 GPU 服务器硬件拓扑与集群组网

记录一些平时接触到的 GPU 知识。由于是笔记而非教程&#xff0c;因此内容不求连贯&#xff0c;有基础的同学可作查漏补缺之用 1 术语与基础 1.1 PCIe 交换芯片1.2 NVLink 定义演进&#xff1a;1/2/3/4 代监控1.3 NVSwitch1.4 NVLink Switch1.5 HBM (High Bandwidth Memory) 由…...

Unresolved plugin: ‘org.apache.maven.plugins:maven-site-plugin:3.12.1‘

问题 使用idea 社区办加载项目提示下面问题&#xff1a; Unresolved plugin: org.apache.maven.plugins:maven-site-plugin:3.12.1 问题解决 maven插件地址&#xff1a; https://maven.apache.org/plugins/maven-dependency-plugin/plugins.html Maven 中央仓库地址&#…...

GO性能优化的一些记录:trace工具的使用

使用场景&#xff1a; 1 想要查看接口延时性偏高 2 深入了解协程具体如何运营的详细信息&#xff08;运行时长&#xff0c;或者什么原因导致了协程运行受阻&#xff09; 可以使用 trace 功能&#xff0c;程序便会对下面的一系列事件进行详细记录&#xff0c;并且会依据所搜集到…...

springboot maven 构建 建议使用 --release 21 而不是 -source 21 -target 21,因为它会自动设置系统模块的位置

使用 --release 选项代替 -source 和 -target 是一种更安全、更兼容的方式,特别是在构建使用较新版本 JDK 的项目时。以下是详细解释和建议: 1. 为什么推荐使用 --release 问题点: 使用 -source 和 -target 标志时,仅设置了代码的语言级别和字节码目标版本,但编译器仍可…...

设计模式-创建型-单例模式

1. 单例模式简介 单例模式&#xff08;Singleton Pattern&#xff09;是一种常见的创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供全局访问点。在很多情况下&#xff0c;我们只希望某个类在整个应用程序中有一个唯一的实例&#xff0c;且该实例需要在…...

linux 网卡配置

linux网卡可以通过命令和配置文件配置,如果是桌面环境还可以通过图形化界面配置. 1.ifconfig(interfaces config)命令方式 通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。依赖于ifconfig命令中使用一些选项属性&#xff0c;ifconfig工具不仅可以被用来…...

python文件操作相关(excel)

python文件操作相关&#xff08;excel&#xff09; 1. openpyxl 库openpyxl其他用法创建与删除操作单元格追加数据格式化单元格合并单元格插入图片公式打印设置保护工作表其他功能 2. pandas 库3. xlrd 和 xlwt 库4. xlsxwriter 库5. pyxlsb 库应用场景参考资料 在 Python 中&a…...

利用Abel_Cain软件实现ARP欺骗

ARP协议是“Address Resolution Protocol”&#xff08;地址解析协议&#xff09;的缩写。在局域网中&#xff0c;网络中实际传输的是“帧”&#xff0c;帧里面是有目标主机的MAC地址的。在以太网中&#xff0c;一个主机要和另一个主机进行直接通信&#xff0c;必须要知道目标主…...

搭建android开发环境 android studio

1、环境介绍 在进行安卓开发时&#xff0c;需要掌握java&#xff0c;需要安卓SDK&#xff0c;需要一款编辑器&#xff0c;还需要软件的测试环境&#xff08;真机或虚拟机&#xff09;。 早起开发安卓app&#xff0c;使用的是eclipse加安卓SDK&#xff0c;需要自行搭建。 目前开…...

使用 Python -m build打包 Python 项目:详解过程与细节

使用 Python -m build 打包 Python 项目&#xff1a;详解过程与细节 Python 项目的打包是发布和分发软件的核心环节。本文将基于用户提供的 pyproject.toml 文件和项目目录结构&#xff0c;详细说明 Python -m build 命令的执行过程&#xff0c;并解答 是否会将 oe_eval 中的代…...

019-spring-基于aop的事务控制原理

1、事务配置&#xff1a; <tx:annotation-driven transaction-manager"transactionManager"/> transaction-manager 默认是找这个bean&#xff1a;transactionManager 2、从命名空间开始找到对应的解析配置如下&#xff1a; 对应的是这个 后续跟源码没有搞明…...

210.xxl-job定时任务:架构,可视化,GLUE模式,负载均衡,分片

目录 一、为什么要用xxl-job 二、xxl-job架构 三、启动调度中心 1.初始化数据库 2.编译源码 四、启动执行器 五、GLUE模式运行 六、负载均衡 七、分片 1.分片环境准备 2.分片实现 八、感谢支持 一、为什么要用xxl-job 以前我们用quartz实现定时任务,但是那是单机…...

LVS 负载均衡原理 | 配置示例

注&#xff1a;本文为 “ LVS 负载均衡原理 | 配置” 相关文章合辑。 部分内容已过时&#xff0c;可以看看原理实现。 未整理去重。 使用 LVS 实现负载均衡原理及安装配置详解 posted on 2017-02-12 14:35 肖邦 linux 负载均衡集群是 load balance 集群的简写&#xff0c;翻…...

堆内存易碎片化

堆内存容易碎片化主要是由于其内存分配和释放的特性以及管理方式的复杂性所导致的。以下是对堆内存容易碎片化的详细解释&#xff1a; 一、内存分配和释放的非连续性 堆内存的分配和释放并不是连续的&#xff0c;这意味着在多次分配和释放后&#xff0c;原本连续的内存空间可…...

Docker镜像瘦身:从1.43G到22.4MB

Docker镜像瘦身:从1.43G到22.4MB 背景1、创建项目2、构建第一个镜像3、修改基础镜像4、多级构建5、使用Nginx背景 在使用 Docker 时,镜像大小至关重要。我们从 create-react-app (https://reactjs.org/docs/create-a-new-react-app.html)获得的样板项目通常都超过 1.43 GB…...

Linux套接字通信学习

Linux套接字通信 代码源码&#xff1a;https://github.com/say-Hai/TcpSocketLearn/tree/CThreadSocket 在网络通信的时候, 程序猿需要负责的应用层数据的处理(最上层)&#xff0c;而底层的数据封装与解封装&#xff08;如TCP/IP协议栈的功能&#xff09;通常由操作系统、网络协…...

XIAO Esp32S3制作网络摄像头——音频获取

1、功能介绍 本文主要是基于XIAO Esp32S3(Sense)做的一款网络摄像头,主要包含以下功能 1 音频获取/保存 2 视频获取/视频保存 3 行人检测/火焰检测/行人追踪(告警) 4 指定区域 5 摄像头旋转 。。。 本文主要实现第一步,音频获取,后续会陆续实现后面的功能,敬请期…...

Docker搭建RocketMQ

Docker搭建RocketMQ 操作系统: CentOS 7 x64 版本号: CentOS Linux release 7.9.2009 (Core) IP地址: 192.168.157.130 Docker 信息: Client: Docker Engine - Community Version: 24.0.7 API version: 1.43 Go version: go1.20.10 Git commit: …...

Python 迭代器与生成器

Python 中的迭代器和生成器是处理集合元素的重要工具&#xff0c;它们在处理大量数据时特别有用&#xff0c;因为它们不需要一次性将所有数据加载到内存中。 迭代器&#xff08;Iterator&#xff09; 迭代器是一个实现了迭代器协议的对象&#xff0c;这意味着它有两个方法&am…...

细说STM32F407单片机通过IIC读写EEPROM 24C02

目录 一、操作说明 二、工程配置 1、时钟、DEBUG、GPIO、USART6、NVIC、Code Generator 2、 IIC2 &#xff08;1&#xff09;Master Features组&#xff0c;主设备参数 &#xff08;2&#xff09;Slave Features组&#xff0c;从设备参数 三、软件设计 1、KELED 2、E…...

Redis 深度解析:从入门到精通

引言 Redis 是一个开源的、高性能的键值存储系统&#xff0c;它支持多种数据结构&#xff0c;并且提供了丰富的功能和接口。作为内存数据库&#xff0c;Redis 以其快速的数据访问速度、灵活的数据模型以及持久化选项而闻名。本文将详细介绍 Redis 的核心概念、工作原理及其应用…...

6-pandas数据读取

前言 一、分组聚合 1.groupby使用&#xff1a; groupby() 是 pandas 库中用于对数据进行分组操作的一个非常重要的方法。 import pandas as pddata {城市: [北京, 上海, 广州, 北京, 上海, 广州],人口: [2154, 2424, 1303, 2154, 2424, 1303],年龄: [25, 30, 35, 25, 30, 3…...

omi friend实战记录

一、简介 omi friend是国外githab上开源的一个“AI硬件”的制作教程&#xff0c;它的形状是个三角形&#xff0c;属于项链佩戴这类的。可以接入llm进行对话&#xff0c;他有麦克风、扬声器&#xff0c;还有电池。外形好看&#xff0c;功能实用。还有专属的一系列app可以供方便…...

马原复习笔记

文章目录 前言导论物质实践人类社会资本主义社会主义共产主义后记 前言 一月二号下午四点多考试&#xff0c;很友好&#xff0c;不是早八&#xff0c;哈哈哈。之前豪言壮语和朋友说这次马原要全对&#xff0c;多做了几次测试之后&#xff0c;发现总有一些知识点是自己不知道的…...

VIM: Vision Mamba基于双向状态空间模型的高效视觉表示学习

这篇文章的主要内容可以概括如下&#xff1a; 背景与动机&#xff1a; 近年来&#xff0c;状态空间模型&#xff08;SSM&#xff09;在长序列建模中展现出巨大潜力&#xff0c;尤其是Mamba模型在硬件感知设计上的高效性。 然而&#xff0c;现有的SSM模型在处理视觉数据时面临…...

CannotRetrieveUpdates alert in disconnected OCP 4 cluster解决

环境&#xff1a; Red Hat OpenShift Container Platform (RHOCP) 4 问题&#xff1a; Cluster Version Operator 不断发送警报&#xff0c;表示在受限网络/断开连接的 OCP 4 集群中无法接收更新。 在隔离的 OpenShift 4 集群中看到 CannotRetrieveUpdates 警报&#xff1a; …...

libmodbus源码中重要的两个结构体讲解

文章目录 一、libmodbus重要数据结构讲解**1. 结构体 `_modbus`**定义成员解析小结**2. 结构体 `_modbus_backend`**定义成员解析小结**3. 两者关系和工作流程****关系****工作流程**一、libmodbus重要数据结构讲解 这两个结构体是 libmodbus 的核心,定义了 Modbus 通信上下文…...

PostgreSQL的一主两从集群搭建部署 (两同步)

一、实验环境 虚拟机名IP身份简称keep-postgres12-node1192.168.122.87主节点node1keep-postgres12-node2192.168.122.89备节点node2keep-postgres12-node3192.168.122.90备节点node3 二、安装数据库 源码包方式&#xff08;主&#xff09; 1、创建用户 [rootkeep-postgre…...

CPT203 Software Engineering 软件工程 Pt.5 软件测试(中英双语)

文章目录 8. 软件测试8.1 Testing&#xff08;测试&#xff09;8.1.1 A note of testing under the V & A framework8.1.2 The Basics8.1.3 The Goals8.1.4 The Stages 8.2 Developing testing&#xff08;开发测试&#xff09;8.2.1 Unit testing&#xff08;单元测试&…...

在 Blazor 和 ASP.NET Core 中使用依赖注入和Scoped 服务实现数据共享方法详解

依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是一种设计模式&#xff0c;用于将对象的依赖关系从对象内部解耦出来&#xff0c;由外部容器进行管理和提供。在 Blazor 和 ASP.NET Core 中&#xff0c;DI 是内置的核心功能&#xff0c;它通过服务生…...

【信号滤波 (下)】采样条件,多种滤波算法对比(Matlab/C++)

目录 一、信号采样条件采样定理ADC的SPS设置 二、常用滤波算法对比A.滑动平均滤波B.陷波滤波陷波滤波器简介FIR(有限脉冲响应)滤波器和IIR(无限脉冲响应)滤波器 基于IIR实现陷波滤波滤波原理讲解双二阶滤波器计算过程陷波滤波优势 在上一篇中&#xff0c;介绍了信号时域到频域的…...

将广播发送和接收端实现一遍,完成一个发送端发送信息,对应多个接收端接收信息实验。

1、将广播发送和接收端实现一遍&#xff0c;完成一个发送端发送信息&#xff0c;对应多个接收端接收信息实验。 接受端 #include<myhead.h> #define handel_err(res,val) if(val-1){perror(res);return-1;} int main(int argc, const char *argv[]) {int rfdsocket(AF_…...

Nginx 负载均衡详解

一、Nginx 简介 Nginx 是一个高性能的开源 Web 服务器和反向代理服务器&#xff0c;以其轻量级、高并发、低内存消耗等特点著称。Nginx 不仅适用于静态资源的快速分发&#xff0c;还广泛应用于负载均衡、反向代理等场景。通过Nginx&#xff0c;可以轻松地构建一个高效、可靠且…...

自动驾驶新纪元:城区NOA功能如何成为智能驾驶技术的分水岭

目录 一、NOA 的定义 二、NOA 的主要特点 导航集成 场景覆盖 智能决策 高级感知能力 驾驶员参与 三、NOA 的优势 四、NOA的衡量指标 定性评价指标 安全性评价指标定义 可靠性评价指标定义 舒适性评价指标定义 通行效率评价指标 定量评价指标 五、代表厂商的实测…...

FFmpeg 编码和解码

文章目录 音频格式AACADIF音频数据交换格式ADTS音频数据传输流 音频解码音频编码 视频格式H264GOP图像组I帧&#xff0c;P帧&#xff0c;B帧H264压缩技术H264压缩级别H264视频级别H264码流结构SPSPPS 解码视频编码视频 音频格式 AAC AAC全称 Advanced Audio Coding&#xff0…...

【Ubuntu】Ubuntu server 18.04 搭建Slurm并行计算环境(包含NFS)

Ubuntu server 18.04 搭建Slurm并行计算环境&#xff08;包含NFS&#xff09; 一、Munge 认证模块 1.1、安装 munge 主节点和子节点都安装munge #安装 sudo apt update && sudo apt install munge libmunge-dev#设置开机启动 sudo systemctl enable munge sudo syste…...

WPF 绘制过顶点的圆滑曲线 (样条,贝塞尔)

在一个WPF项目中要用到样条曲线&#xff0c;必须过顶点&#xff0c;圆滑后还不能太走样&#xff0c;捣鼓一番&#xff0c;发现里面颇有玄机&#xff0c;于是把我多方抄来改造的方法发出来&#xff0c;方便新手&#xff1a; 如上图&#xff0c;看代码吧&#xff1a; ----------…...

Spring 的不同事务传播行为

目录 Spring 的不同事务传播行为 PROPAGATION_REQUIRES_NEW事务传播行为什么情况下会使用? 一、PROPAGATION_REQUIRES_NEW的含义 二、使用场景 三、注意事项 PROPAGATION_NESTED事务传播行为什么情况下会使用? 一、PROPAGATION_NESTED的含义 二、使用场景 三、嵌套事…...

PlantUML 时序图 基本例子

基本的例子 序列-> 用于绘制两个参与者之间的信息。参与者不必明确声明。 要有一个点状的箭头&#xff0c;就用--> 也可以用<- 和<-- 。这不会改变绘图&#xff0c;但可能提高可读性。注意&#xff0c;这只适用于顺序图&#xff0c;其他图的规则不同。 plantum…...

QILSTE H8-C414SY高亮黄光LED灯珠 发光二极管LED

在电子组件的复杂世界中&#xff0c;H8-C414SY型号的LED以其精确的技术参数和卓越的性能&#xff0c;成为了工程师和技术人员不可忽视的选择。本文将通过对这款高亮黄光LED的技术参数进行深入分析&#xff0c;增加文本的复杂性和突发性&#xff0c;以提供一份详尽的技术参考。 …...