软件构造复习的一些经验笔记

软件构造复习的一些经验笔记

术语解释

  • LSP原则(里氏替换原则)

什么是LSP原则,就是A类继承B类,A类应该比B类的spec(规约)更强

换句话说:你爹会做鱼香肉丝,你爹的手艺遗传给了你,所以你肯定会做鱼香肉丝,而且你还有可能比你爹做的鱼香肉丝更好吃

  • 防御性拷贝

什么是防御性拷贝,防御性拷贝就是我传给客户端数据的时候,不能直接把原来的数据给他,我得复制一个新的,把新的给他。因为万一客户把我旧的数据改变了,我手里只有这一份数据,我在用这个数据的时候就成了被改变了的数据了。所以我不得不复制一份新的给他,防止他给我改变了我的数据。

  • AF是啥,RI是啥

AF

想象一下你有一个玩具箱(表示域R),里面有很多不同形状和颜色的积木。这些积木代表的是你玩具箱里的具体玩具。

现在,你想用这些积木来搭一个漂亮的城堡(抽象域A)。城堡就是你心里想象出来的东西,是用积木搭出来的。这时候,你需要一个“魔法配方”,告诉你哪些积木可以搭成城堡。这就是AF,抽象函数。

抽象函数(AF)就像一个魔法配方,它告诉你怎么样用玩具箱里的积木搭成你心里想象的城堡。

RI

想象你的玩具箱里的积木有一些规则,比如:

1.积木不能破损,要完整的。

2.不能有超过50块积木。

这些规则确保了你的玩具箱里的积木是好的,可以用来搭城堡。这些规则就是RI,表示不变量。

表示不变量(RI)就像玩具箱里的规矩,确保里面的积木是完好和正确的,这样你才能用这些积木搭成你想要的城堡。

重要知识

hashCode和equals方法

  • hashCode方法返回对象的哈希码值,它是一个整数。哈希码通常用于散列表中的散列算法,例如Java中的HashMapHashSet等集合。
  • equals方法用于判断两个对象是否相等。它是从Object类继承而来的,默认实现是比较对象的内存地址。
  • 根据Java的规范,hashCodeequals方法必须满足以下条件:
    1. 如果两个对象相等(即 equals(Object obj) 返回 true),那么它们的哈希码值必须相等。即对于任何两个对象 ab,如果 a.equals(b)true,那么 a.hashCode() == b.hashCode() 也必须为 true
    2. 如果两个对象的哈希码值相等,它们并不一定相等。即对于任何两个对象 ab,如果 a.hashCode() == b.hashCode()truea.equals(b) 不一定为 true
    3. 如果对象在equals比较中不相等,那么它们的hashCode值不要求一定不相等,但好的hashCode实现应该尽量避免这种情况。为了提高散列表的性能,不相等的对象尽量具有不同的哈希码值。

异常

在Java编程中,异常分为两大类:checked异常unchecked异常。这两类异常的主要区别在于它们的处理方式以及在编译时和运行时的行为。下面是详细的解释:

Checked异常
定义

Checked异常是那些在编译时就必须处理的异常。这意味着,如果某个方法可能会抛出checked异常,那么该方法要么必须在方法签名中声明该异常,要么必须在方法体内通过try-catch块进行处理。

特点
  • 编译时检查:编译器会强制检查这些异常是否被处理。
  • 必须处理:如果不处理checked异常,代码将无法通过编译。
  • 典型例子IOException, SQLException, ClassNotFoundException 等。
示例代码
java复制代码import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;public class CheckedExceptionExample {public static void main(String[] args) {try {File file = new File("non_existent_file.txt");FileReader fr = new FileReader(file);} catch (FileNotFoundException e) {e.printStackTrace();}}
}

在上面的例子中,FileNotFoundException是一个checked异常,必须通过try-catch块处理,否则编译器会报错。

Unchecked异常
定义

Unchecked异常是那些在编译时不强制要求处理的异常。它们通常是由程序中的逻辑错误或程序员的疏忽引起的。这类异常在运行时才会抛出。

特点
  • 运行时检查:编译器不强制检查这些异常是否被处理。
  • 不强制处理:程序员可以选择处理或不处理unchecked异常。
  • 典型例子NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException 等。
示例代码
java复制代码public class UncheckedExceptionExample {public static void main(String[] args) {int[] numbers = {1, 2, 3};System.out.println(numbers[3]); // 这将抛出ArrayIndexOutOfBoundsException}
}

在上面的例子中,ArrayIndexOutOfBoundsException是一个unchecked异常,程序不会在编译时提醒处理这个异常,但它会在运行时抛出。

异常的继承关系

在Java的异常层次结构中:

  • java.lang.Throwable
    

    是所有异常的根类。

    • java.lang.Exception
      

      是所有checked异常的父类。

      • java.lang.RuntimeException是所有unchecked异常的父类。

因此,checked异常是Exception的直接子类(但不包括RuntimeException及其子类),而unchecked异常是RuntimeException及其子类。

Iterable接口和Iteator接口

  1. 用途
    • Iterable:定义一个集合可以被迭代,但不提供具体的迭代实现。实现Iterable接口的类可以使用增强型for循环。
    • Iterator:提供具体的迭代功能,可以在迭代过程中删除元素。
  2. 方法
    • Iterable只有一个方法iterator(),返回一个Iterator对象。
    • Iterator有三个方法:hasNext()next(),和remove(),用于遍历和修改集合。
  3. 关系
    • 实现Iterable接口的类必须提供一个iterator()方法,该方法返回一个Iterator对象。
    • Iterator接口提供了实际的迭代行为,是遍历集合元素的工具。

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

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

相关文章

基于springboot实现医疗挂号管理系统项目【项目源码+论文说明】

基于springboot实现医疗挂号管理系统演示 摘要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以&…

JAVA -- 逻辑控制详解

JAVA逻辑控制详解 1.顺序结构 按照代码书写的顺序一行一行执行 System.out.println("123");//123 System.out.println("456");//456 System.out.println("789");//7892.分支结构 if 语句 switch 语句 2.1 if 语句 语法格式1(单分支) //if(布…

安全阀检测周期:确定因素与操作流程详解

在工业生产中,安全阀扮演着至关重要的角色,其性能的稳定性和准确性直接关系到设备和系统的安全。为确保安全阀的正常运行和事故防范,对其进行定期检测显得尤为关键。 接下来,佰德将深入探讨安全阀检测周期相关的内容,…

HTML静态网页成品作业(HTML+CSS)——家乡芷江侗族自治县介绍网页(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…

【ROS机器人学习】--------1ROS工作空间和功能包创建

虚拟机工具和镜像链接: https://pan.baidu.com/s/1HDmpbMESiUA2nj3qFVyFcw?pwd8686 提取码: 8686 ROS工作空间是一个用于组织和管理ROS(机器人操作系统)包的目录结构,它通常包含多个子目录,用于存放源码、构建文件和安装文件。工…

香橙派OrangePI AiPro测评

实物 为AI而生 打开盒子 截图电源开机进入 作为一个AI产品,必须有一个人机交互的界面才行。大家都在跑算法,于是我就开始进行整理着手整理搭建Qt的环境。 1、下载源码 wget https://download.qt.io/archive/qt/5.12/5.12.12/single/qt-everywhere-src-5.12.12.tar.xz待…

RDP方式连接服务器上传文件方法

随笔 目录 1. RDP 连接服务器 2. 为避免rdp 访问界面文字不清晰 3. 本地上传文件到服务器 1. RDP 连接服务器 # mstsc 连接服务器step1: 输入mstscstep2: 输入 IP, username, passwd 2. 为避免rdp 访问界面文字不清晰 解决方法: 3. 本地上传文件到服务器 step…

关于C++的特殊类定制

特殊类定制 在C中,一些特殊性质的类如何设计 类禁止拷贝的对象 C11 使用delete关键字赋值给拷贝构造和赋值C98将拷贝构造和赋值声明在私有里 类只能在堆上创建的对象 将构造函数私有化, 提供一个获取对象堆上创建对象的公有函数将析构函数私有化, 提供一个释放…

JavaScript面向对象编程入门:从0到1的奇幻之旅【含代码示例】

JavaScript面向对象编程入门:从零到英雄的奇幻之旅【含代码示例】 一、OOP:编程界的哈利波特基本概念类与实例 二、挥舞魔杖:创建类与实例基本语法 三、继承与封装:家族的力量继承封装 四、实战与技巧:打造坚固的魔法城…

IT行业的现状与未来发展趋势:从云计算到量子计算的技术变革

随着技术的不断进步,IT行业已经成为推动全球经济和社会发展的关键力量。从云计算、大数据、人工智能到物联网、5G通信和区块链,这些技术正在重塑我们的生活和工作方式。本文将深入探讨当前IT行业的现状,并展望未来发展趋势,旨在为…

vscode当前分支有未提交的修改,但是暂时不想提交,想要切换到另一个分支该怎么办

当前分支有未提交的修改,但是暂时不想提交,想要切换到另一个分支该怎么办? 首先,可以将当前修改暂存起来,以便之后恢复 git stash 然后切换到目标分支,例如需求A所在分支 git checkout feat-a-jie 修改完A需求后,需要先切换回之前的分支,例如需求B所在分支 git checkout feat…

免费插件集-illustrator插件-Ai插件-文本对象分行

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件,加强illustrator使用人员工作效率,进行文本对象分行。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/87890501&…

通过安全的云开发环境重新发现 DevOps 的心跳

云开发平台如何“提升” DevOps 首先,我来简单介绍一下什么是云开发环境:它通常运行带有应用程序的 Linux 操作系统,提供预配置的环境,允许进行编码、编译和其他类似于本地环境的操作。从实现的角度来看,这样的环境类…

前端 JS 经典:读取文件原始内容

前言:有些时候在工程化开发中,我们需要读取文件里面的原始内容,比如,你有一个文件,后缀名为 .myfile,你需要拿到这个文件里的内容,该怎么处理呢。 在 vue2 中,因为 vue2 使用 vue-c…

【算法】前缀和——寻找数组的中心下标

本节博客是用前缀和算法图解“寻找数组的中心下标”,有需要借鉴即可。 目录 1.题目2.题意3.前缀和求解4.示例代码5.细节6.总结 1.题目 题目链接:LINK 2.题意 我们以示例1为例来图解一下题意: 3.前缀和求解 根据已有经验,我…

Java 读取 xml 文件的五种方式

在编写与 XML 数据交互的现代软件应用时,有效地读取和解析 XML 文件是至关重要的。XML(可扩展标记语言)因其灵活性和自我描述性,已成为数据存储和传输的一种普遍格式。对于 Java 开发者来说,Java 提供了多种工具和库来…

数据库索引相关的知识点总结

目录 1. 索引的概念 2. 索引的作用 3. 索引的类型 4. 索引的缺点 5. 索引的使用场景 6. 索引的设计原则 7. 索引的实现技术 8. 索引的优化技巧: 数据库表的索引是一个非常重要的概念,它类似于一本书的目录,可以帮助我们快速找到所需的…

Idea工具的使用技巧与常见问题解决方案

一、使用技巧 1、启动微服务配置 如上图,在编辑配置选项,将对应的启动入口类加进去, 增加jvm启动参数, 比如: -Denvuat 或者 -Denvuat -Dfile.encodingUTF-8 启动配置可能不是-Denvuat,这个自己看代…

Android 11 Audio音频系统配置文件解析

在AudioPolicyService的启动过程中,会去创建AudioPolicyManager对象,进而去解析配置文件 //frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientIn…

MySQL目录和文件

MySQL目录和文件 bin目录 存储一些mysql脚本比如mysqld、mysqld-self等等,用于执行mysql一些操作 数据目录 show variables like datadir;--查看数据目录位置每一个数据库都有一个和数据库名相同的文件夹;MySQL5.7开始每创建一个表,在Innod…