軟件構造復習的一些經驗筆記

軟件構造復習的一些經驗筆記

術語解釋

  • 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.pswp.cn/bicheng/18592.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18592.shtml
英文地址,請注明出處:http://en.pswp.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…