《Java 程序設計》第 12 章 - 異常處理

????????大家好!今天我們來學習《Java 程序設計》中的第 12 章 —— 異常處理。在編程過程中,錯誤和異常是不可避免的。一個健壯的程序必須能夠妥善處理各種異常情況。本章將詳細介紹 Java 中的異常處理機制,幫助大家編寫出更穩定、更可靠的 Java 程序。

思維導圖

12.1 異常與異常類

12.1.1 異常的概念

????????在 Java 中,異常(Exception)?是指程序在運行過程中發生的非正常事件,它會中斷程序的正常執行流程。

????????想象一下現實生活中的場景:當你開車去上班時,可能會遇到輪胎漏氣、發動機故障等意外情況,這些情況會阻止你按計劃到達公司。在程序中也是如此,比如:

  • 試圖打開一個不存在的文件
  • 網絡連接中斷
  • 除以零的運算
  • 數組下標越界

????????這些情況都可以稱為異常。Java 的異常處理機制提供了一種優雅的方式來處理這些意外情況,使程序能夠繼續運行或友好地終止。

12.1.2 異常類

????????Java 中的所有異常都是通過來表示的,這些類統稱為異常類。Java 提供了一個完善的異常類體系,所有異常類都直接或間接繼承自Throwable

Throwable類有兩個重要的子類:

  • Error:表示嚴重的錯誤,通常是虛擬機相關的問題,如內存溢出(OutOfMemoryError),程序一般無法處理這類錯誤。
  • Exception:表示程序可以處理的異常,是我們在編程中主要關注的類。

Exception類又可以分為:

  • Checked Exception(受檢異常):在編譯時就需要處理的異常,如果不處理,編譯器會報錯。如IOExceptionSQLException等。
  • Unchecked Exception(非受檢異常):也稱為運行時異常(RuntimeException),在編譯時不需要強制處理,通常是由程序邏輯錯誤引起的。如NullPointerExceptionArrayIndexOutOfBoundsException等。

下面是異常類的繼承關系圖:

@startuml
title Java異常類體系
Throwable <|-- Error
Throwable <|-- Exception
Exception <|-- RuntimeException
Exception <|-- IOException
Exception <|-- SQLException
RuntimeException <|-- NullPointerException
RuntimeException <|-- ArrayIndexOutOfBoundsException
RuntimeException <|-- ArithmeticException
@enduml

12.2 異常處理

????????Java 提供了一套完整的異常處理機制,主要通過trycatchfinallythrowthrows關鍵字來實現。

12.2.1 異常的拋出與捕獲

異常處理的核心思想是拋出異常捕獲異常

  1. 拋出異常:當程序執行過程中遇到異常情況時,會創建一個異常對象并將其拋出。
  2. 捕獲異常:異常被拋出后,程序可以捕獲這個異常并進行處理,而不是讓程序直接崩潰。

????????形象地說,這就像生活中 "上報問題" 和 "解決問題" 的過程:員工遇到無法解決的問題(拋出異常),上報給經理(捕獲異常),經理來處理這個問題。

12.2.2 try-catch-finally 語句

try-catch-finally是 Java 中處理異常的基本結構,語法如下:

try {// 可能會發生異常的代碼
} catch (異常類型1 異常對象名) {// 處理異常類型1的代碼
} catch (異常類型2 異常對象名) {// 處理異常類型2的代碼
} finally {// 無論是否發生異常,都會執行的代碼
}

  • try 塊:包含可能會拋出異常的代碼。
  • catch 塊:用于捕獲并處理 try 塊中拋出的異常。可以有多個 catch 塊,分別處理不同類型的異常。
  • finally 塊:無論是否發生異常,都會執行的代碼,通常用于釋放資源

執行流程示意圖

示例代碼

public class TryCatchFinallyDemo {public static void main(String[] args) {int a = 10;int b = 0;int[] arr = {1, 2, 3};try {// 可能發生異常的代碼int result = a / b;  // 會拋出ArithmeticExceptionSystem.out.println("數組的第4個元素是:" + arr[3]);  // 會拋出ArrayIndexOutOfBoundsExceptionSystem.out.println("計算結果:" + result);} catch (ArithmeticException e) {// 處理算術異常System.out.println("發生算術異常:" + e.getMessage());e.printStackTrace();  // 打印異常堆棧信息} catch (ArrayIndexOutOfBoundsException e) {// 處理數組下標越界異常System.out.println("發生數組下標越界異常:" + e.getMessage());} finally {// 無論是否發生異常,都會執行System.out.println("finally塊執行了,通常用于釋放資源");}System.out.println("程序繼續執行...");}
}

運行上述代碼,輸出結果:

12.2.3 用 catch 捕獲多個異常

Java 7 及以上版本允許在一個catch塊中捕獲多種類型的異常,使用|分隔不同的異常類型。

示例代碼

import java.io.FileNotFoundException;
import java.io.IOException;public class MultiCatchDemo {public static void main(String[] args) {try {// 模擬可能拋出不同異常的操作int choice = Integer.parseInt(args[0]);if (choice == 1) {throw new FileNotFoundException("文件未找到");} else if (choice == 2) {throw new IOException("I/O操作失敗");} else if (choice == 3) {throw new ArithmeticException("算術錯誤");}} catch (FileNotFoundException e) {// 先捕獲子類異常System.out.println("處理文件未找到異常:" + e.getMessage());} catch (IOException e) {// 再捕獲父類異常System.out.println("處理其他I/O異常:" + e.getMessage());} catch (ArithmeticException e) {// 捕獲ArithmeticExceptionSystem.out.println("處理算術異常:" + e.getMessage());} catch (ArrayIndexOutOfBoundsException e) {// 捕獲數組下標越界異常(當沒有傳入命令行參數時)System.out.println("請傳入一個整數參數(1-3)");}System.out.println("程序結束");}
}

說明

  1. 當一個catch捕獲多種異常類型時,這些異常類型不能有繼承關系
  2. 這種寫法比多個catch塊更簡潔,尤其是當多種異常的處理邏輯相同時。
  3. 可以通過命令行參數來測試不同的異常情況:
    • java MultiCatchDemo 1:測試 FileNotFoundException
    • java MultiCatchDemo 2:測試 IOException
    • java MultiCatchDemo 3:測試 ArithmeticException
    • java MultiCatchDemo:測試 ArrayIndexOutOfBoundsException

12.2.4 聲明方法拋出異常

????????如果一個方法可能會拋出異常,但不想在方法內部處理,而是讓調用者來處理,可以使用throws關鍵字在方法聲明處聲明該方法可能拋出的異常。

語法

修飾符 返回值類型 方法名(參數列表) throws 異常類型1, 異常類型2, ... {// 方法體
}

示例代碼

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;public class ThrowsDemo {// 聲明方法可能拋出FileNotFoundException和IOExceptionpublic static void readFile(String fileName) throws FileNotFoundException, IOException {FileInputStream fis = new FileInputStream(fileName);int data = fis.read();while (data != -1) {System.out.print((char) data);data = fis.read();}fis.close();}public static void main(String[] args) {try {// 調用聲明了拋出異常的方法,必須處理這些異常readFile("test.txt");} catch (FileNotFoundException e) {System.out.println("文件未找到:" + e.getMessage());} catch (IOException e) {System.out.println("文件讀取錯誤:" + e.getMessage());}System.out.println("\n程序執行完畢");}
}

說明

  1. 對于 checked exception,如果方法不處理,就必須在方法聲明中用throws聲明。
  2. 對于 unchecked exception(RuntimeException 及其子類),可以不用throws聲明,編譯器不會強制要求。
  3. 調用聲明了異常的方法時,要么用try-catch處理這些異常,要么在當前方法中也用throws聲明繼續向上拋出。

12.2.5 用 throw 語句拋出異常

??throw語句用于手動拋出一個具體的異常對象。通常在滿足特定條件時,我們認為這是一個異常情況,就可以手動拋出異常。

語法

throw 異常對象;

示例代碼

public class ThrowDemo {// 計算年齡的方法,如果年齡不合法則拋出異常public static void printAge(int birthYear) {int currentYear = 2023;int age = currentYear - birthYear;if (birthYear < 1900 || birthYear > currentYear) {// 手動拋出異常throw new IllegalArgumentException("出生年份不合法:" + birthYear);}System.out.println("今年" + age + "歲");}public static void main(String[] args) {try {printAge(2000);  // 合法的出生年份printAge(2050);  // 不合法的出生年份,會拋出異常printAge(1850);  // 這行代碼不會執行} catch (IllegalArgumentException e) {System.out.println("捕獲到異常:" + e.getMessage());}System.out.println("程序繼續執行");}
}

運行結果:

throwthrows的區別

  • throw用于方法內部,拋出的是一個具體的異常對象。
  • throws用于方法聲明處,聲明的是方法可能拋出的異常類型,可以是多個。

12.2.6 try-with-resources 語句

????????Java 7 引入了try-with-resources語句,用于自動管理資源(如文件流、數據庫連接等)。它確保在資源使用完畢后自動關閉資源,無需在finally塊中手動關閉。

要使用try-with-resources,資源類必須實現AutoCloseable接口(或其子類Closeable接口)。

語法

try (資源聲明) {// 使用資源的代碼
} catch (異常類型 異常對象名) {// 處理異常的代碼
}

示例代碼

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;public class TryWithResourcesDemo {public static void main(String[] args) {// try-with-resources語句,資源會自動關閉try (FileInputStream fis = new FileInputStream("test.txt")) {int data = fis.read();while (data != -1) {System.out.print((char) data);data = fis.read();}} catch (FileNotFoundException e) {System.out.println("文件未找到:" + e.getMessage());} catch (IOException e) {System.out.println("文件讀取錯誤:" + e.getMessage());}System.out.println("\n程序執行完畢");}
}

傳統方式與 try-with-resources 對比

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;// 傳統方式需要在finally中手動關閉資源
public class TraditionalResourceHandling {public static void main(String[] args) {FileInputStream fis = null;try {fis = new FileInputStream("test.txt");// 使用資源,這里添加一些實際的讀取操作示例int data = fis.read();while (data != -1) {System.out.print((char) data);data = fis.read();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close();  // 關閉資源可能也會拋出異常} catch (IOException e) {e.printStackTrace();}}}}
}

說明

  1. try-with-resources語句可以聲明多個資源,用分號分隔
  2. 資源的關閉順序與聲明順序相反。
  3. try-with-resources語句也可以有catchfinally塊,用于處理異常或執行必要的清理工作。

12.3 自定義異常類

????????Java 提供的異常類可能無法滿足所有業務需求,這時我們可以自定義異常類。自定義異常類通常繼承自Exception(checked exception)或RuntimeException(unchecked exception)。

自定義異常類的步驟

  1. 創建一個類,繼承ExceptionRuntimeException
  2. 提供構造方法,通常至少提供兩個構造方法:一個無參構造方法,一個帶有詳細信息的構造方法。

示例代碼

// 自定義異常類:用戶年齡不合法異常
class InvalidAgeException extends Exception {// 無參構造方法public InvalidAgeException() {super();}// 帶有詳細信息的構造方法public InvalidAgeException(String message) {super(message);}
}// 自定義異常類:用戶姓名為空異常(繼承自RuntimeException)
class EmptyNameException extends RuntimeException {public EmptyNameException() {super();}public EmptyNameException(String message) {super(message);}
}// 使用自定義異常的示例
public class CustomExceptionDemo {// 注冊用戶的方法public static void registerUser(String name, int age) throws InvalidAgeException {if (name == null || name.trim().isEmpty()) {// 拋出unchecked異常,不需要在方法聲明中throwsthrow new EmptyNameException("用戶名不能為空");}if (age < 0 || age > 150) {// 拋出checked異常,需要在方法聲明中throwsthrow new InvalidAgeException("年齡不合法:" + age + ",年齡必須在0-150之間");}System.out.println("用戶注冊成功:" + name + "," + age + "歲");}public static void main(String[] args) {try {registerUser("張三", 25);    // 正常情況registerUser("", 30);       // 姓名為空,會拋出EmptyNameExceptionregisterUser("李四", 200);   // 年齡不合法,會拋出InvalidAgeException} catch (InvalidAgeException e) {System.out.println("注冊失敗:" + e.getMessage());} catch (EmptyNameException e) {System.out.println("注冊失敗:" + e.getMessage());}System.out.println("程序結束");}
}

運行結果:

何時需要自定義異常

  • 當 Java 內置異常不能準確描述業務中的異常情況時。
  • 希望通過異常類型來區分不同的錯誤場景,便于異常處理。
  • 需要在異常中包含特定的業務信息時。

12.4 斷言

????????斷言(Assertion)是 Java 1.4 引入的特性,用于在程序開發和測試階段檢查某些條件是否滿足。如果斷言失敗,會拋出AssertionError

12.4.1 使用斷言

斷言的語法有兩種形式:

  1. 簡單形式
assert 布爾表達式;

如果布爾表達式的值為false,則拋出AssertionError

? ? 2.帶消息的形式:

assert 布爾表達式 : 消息表達式;

如果布爾表達式的值為false,則拋出AssertionError,并將消息表達式的值作為錯誤消息。

12.4.2 開啟和關閉斷言

????????默認情況下,Java 虛擬機(JVM)是關閉斷言功能的。要開啟斷言,需要使用-ea(或-enableassertions)參數。

開啟斷言的方式

  • 對所有類開啟斷言:java -ea 類名
  • 對特定包開啟斷言:java -ea:包名... 類名
  • 對特定類開啟斷言:java -ea:類名 類名

關閉斷言的方式

  • 使用-da(或-disableassertions)參數,用法與-ea類似。

在 IDE(如 Eclipse、IntelliJ IDEA)中,可以在運行配置中設置 VM 參數來開啟或關閉斷言。

12.4.3 何時使用斷言

斷言主要用于:

  1. 檢查程序內部的 invariants(不變量),即那些在程序正常執行時必須為真的條件。
  2. 檢查方法的前置條件和后置條件。
  3. 檢查私有方法的參數有效性(對于公共方法,應使用異常來處理無效參數)。

注意

  • 斷言不應該用于檢查程序運行時可能出現的預期錯誤,如用戶輸入錯誤。
  • 斷言可能會被關閉,因此不能依賴斷言來處理程序的關鍵功能。
  • 不要在斷言表達式中包含有副作用的操作(如修改變量值),因為當斷言關閉時,這些操作不會執行。

12.4.4 斷言示例

public class AssertionDemo {// 計算三角形面積的方法(海倫公式)public static double calculateTriangleArea(double a, double b, double c) {// 檢查前置條件:三角形的三條邊必須為正數assert a > 0 && b > 0 && c > 0 : "三角形的邊長必須為正數";// 檢查前置條件:三角形任意兩邊之和大于第三邊assert a + b > c && a + c > b && b + c > a : "不滿足三角形兩邊之和大于第三邊";double s = (a + b + c) / 2;double area = Math.sqrt(s * (s - a) * (s - b) * (s - c));// 檢查后置條件:面積必須為正數assert area > 0 : "計算出的面積必須為正數";return area;}public static void main(String[] args) {try {double area1 = calculateTriangleArea(3, 4, 5);System.out.println("直角三角形的面積:" + area1);// 測試無效的三角形(兩邊之和不大于第三邊)double area2 = calculateTriangleArea(1, 1, 3);System.out.println("面積:" + area2);} catch (AssertionError e) {System.out.println("斷言失敗:" + e.getMessage());}}
}

運行說明

  1. 當關閉斷言運行時(默認情況),程序不會檢查斷言條件,可能會計算出不合理的結果。
  2. 當開啟斷言運行時(java -ea AssertionDemo),第二個計算會觸發斷言失敗,輸出:
直角三角形的面積:6.0
斷言失敗:不滿足三角形兩邊之和大于第三邊

12.5 小結

本章我們學習了 Java 中的異常處理機制,主要內容包括:

  1. 異常的概念:異常是程序運行時發生的非正常事件,會中斷程序的正常執行。
  2. 異常類體系:所有異常類都繼承自Throwable,主要分為ErrorException兩大類。Exception又分為 checked exception 和 unchecked exception。
  3. 異常處理機制
    • 使用try-catch-finally語句捕獲和處理異常。
    • 使用throws聲明方法可能拋出的異常。
    • 使用throw手動拋出異常。
    • 使用try-with-resources自動管理資源。
  4. 自定義異常:當 Java 內置異常不能滿足需求時,可以自定義異常類。
  5. 斷言:用于開發和測試階段檢查某些條件是否滿足,默認是關閉的。

????????掌握異常處理是編寫健壯 Java 程序的關鍵。合理地使用異常處理機制,可以使程序在遇到錯誤時能夠優雅地處理,而不是直接崩潰,同時也便于調試和維護。

編程練習

  1. 練習 1:除法計算器
    編寫一個程序,實現兩個整數的除法運算。要求:

    • 處理除數為 0 的情況(ArithmeticException)。
    • 處理輸入非整數的情況(InputMismatchException)。
    • 使用 try-catch-finally 結構,確保程序在任何情況下都能友好地提示用戶。

練習 1 參考答案

import java.util.InputMismatchException;
import java.util.Scanner;public class DivisionCalculator {public static void main(String[] args) {Scanner scanner = null;try {scanner = new Scanner(System.in);System.out.print("請輸入被除數:");int dividend = scanner.nextInt();System.out.print("請輸入除數:");int divisor = scanner.nextInt();int result = dividend / divisor;System.out.println(dividend + " / " + divisor + " = " + result);} catch (ArithmeticException e) {System.out.println("錯誤:除數不能為0");} catch (InputMismatchException e) {System.out.println("錯誤:請輸入有效的整數");} finally {if (scanner != null) {scanner.close();System.out.println("資源已釋放");}}System.out.println("程序結束");}
}

????????

????????希望本章的內容能幫助你理解和掌握 Java 異常處理的相關知識。如果有任何疑問或建議,歡迎在評論區留言討論!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91242.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91242.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91242.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32CubeIDE新建項目過程記錄備忘(二) GPIO輸出demo:LED閃爍

利用前面創建好的基礎模板項目文件&#xff0c;創建第一個應用項目&#xff0c;單片機的hello world&#xff1a;LED閃爍。打開模板文件文件--從文件系統中打開項目&#xff1a;在彈出的窗口中選擇之前創建的模板項目文件并打開。復制粘貼新項目 在項目管理器&#xff0c;復制之…

HTML基礎P2 | JS基礎講解

什么是JS JS是一個網頁的腳本語言&#xff0c;你可以理解為在HTML中寫類似于JAVA等高級編程語言的代碼&#xff0c;使得網頁可以實現一些包含邏輯處理的交互操作 簡單上手例子 接下來&#xff0c;給大家一個簡單的小例子來感受一下 <!DOCTYPE html> <html lang&qu…

QT筆記(2)——vscode + CMAKE + qtcreate的操作方式

1.vscode 下載cmake&#xff0c;clangd&#xff0c;qtConfigure&#xff0c;cmake tool的相關插件支持 2. qtConfigure插件配置 根據自己下載的qt目錄下尋找如圖的相關工具 3. qt環境變量配置 在系統變量的path中添加qt編譯需要的環境變量。 4.下載Cmake支持 CMake下…

sed編程入門

一.sed是啥sed&#xff08;流編輯器&#xff0c;Stream Editor&#xff09;是 Unix/Linux 系統中強大的文本處理工具&#xff0c;常用于對文本進行替換、刪除、插入、追加等操作。它逐行處理輸入文本&#xff0c;并根據提供的腳本命令修改文本&#xff0c;最后輸出結果。二.基本…

知識速查大全:python面向對象基礎

目錄 一、面向對象的基本概念 二、類和對象 1.類 2.對象 三、屬性&#xff08;數據&#xff09;和方法 1.數據 1.1.實例數據 1.2.類數據 2.方法 2.1.實例方法 2.2.類方法 3.數據和方法的綜合使用 四、面向對象三大特性 1.封裝 2.繼承 2.1.單繼承 2.2.多繼承 2.3.混合類 2.4.方法…

Linux系統編程Day1-- 免費云服務器獲取以及登錄操作

一、 學生黨如何“白嫖”或免費使用云服務器&#xff1f; 作為學生黨&#xff0c;資金有限的情況下確實不容易長期負擔服務器費用。但好消息是&#xff0c;有多種方式可以“白嫖”或低成本使用云服務器&#xff0c;尤其是針對學生身份、學習用途和開發者計劃。 1、使用各大云平…

15.11 單卡訓練770M參數模型!DeepSpeed ZeRO-3實戰:RTX 4090顯存直降6.8GB

單卡訓練770M參數模型!DeepSpeed ZeRO-3實戰:RTX 4090顯存直降6.8GB 實戰 DeepSpeed ZeRO-2 和 ZeRO-3 單機單卡訓練 為什么需要單機單卡訓練場景? 雖然 DeepSpeed 的 ZeRO 技術主要面向分布式訓練場景,但單機單卡訓練仍然具有重要實踐價值: 開發調試:在資源有限情況下…

HTTPS基本工作過程:基本加密過程

HTTPS基本工作過程&#xff1a;HTTPS只是HTTP的基礎上引入加密機制1.引入對稱加密首先&#xff0c;什么是對稱加密和非對稱加密&#xff1f;對稱加密&#xff1a;使用同一把密鑰加密解密非對稱加密&#xff1a;有兩把密鑰&#xff0c;為公鑰&#xff08;公開的&#xff09;和私…

ES 文件瀏覽器:多功能文件管理與傳輸利器

ES 文件瀏覽器是一款功能強大的文件管理器軟件&#xff0c;支持多種文件傳輸協議&#xff0c;能夠方便地管理手機、平板電腦和電腦中的文件。它不僅提供了豐富的文件管理功能&#xff0c;還支持多種設備之間的文件傳輸&#xff0c;滿足用戶在不同場景下的需求。 核心功能 1. 文…

github-idea新建文件就要彈窗提醒-如何關閉-2025.7.30

打開設置 進入 File&#xff08;文件&#xff09; > Settings&#xff08;設置&#xff09;。 導航到版本控制設置&#xff1a; 在左側導航欄中&#xff0c;展開 Version Control&#xff08;版本控制&#xff09;。 選擇 Confirmation&#xff08;確認&#xff09;。修改文…

滾珠導軌在電子制造中的流暢性優勢

在電子元件微米級精度要求的搬運與裝配環節&#xff0c;傳統導軌易因摩擦、磨損導致定位偏差或設備抖動。而滾珠導軌憑借滾動摩擦設計&#xff0c;將滑動阻力降低80%以上&#xff0c;成為高精度電子制造設備的首選傳動部件。微米級精度&#xff1a;在貼片機中&#xff0c;滾珠導…

數據結構——單鏈表1

1. 單鏈表1.1 概念與結構概念&#xff1a;鏈表是一種物理存儲結構上非連續、非順序的存儲結構&#xff0c;數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。1.1.1 結點與順序表不同的是&#xff0c;鏈表里的每節都是獨立申請下來的空間&#xff0c;我們稱之為“節點/結點…

STM32CubeMX + HAL庫:基于DHT11溫濕度監測實現

1. 概述1.1 實驗目的本實驗旨在利用 DHT11 溫濕度傳感器&#xff0c;每隔 5 秒采集一次環境的溫度與濕度數據&#xff0c;并通過串口將數據循環打印輸出。所使用的 DHT11 模塊硬件結構簡單&#xff0c;包含三個接口引腳&#xff1a;電源正極&#xff08;VCC&#xff09;、電源負…

常見排序的特性總結

目錄 1.排序的穩定性 2.直接插入排序的特性總結 3.希爾排序的特性總結 4.直接選擇排序的特性總結 5.堆排序的特性總結 6.冒泡排序的特性總結 7.快速排序的特性總結 8.歸并排序的特性總結 9.計數排序的特性總結 10.總結 1.排序的穩定性 排序的穩定性是說 相同大小的元…

【硬件-筆試面試題】硬件/電子工程師,筆試面試題-49,(知識點:OSI模型,物理層、數據鏈路層、網絡層)

目錄 1、題目 2、解答 OSI 七層模型的分層及功能&#xff08;從下到上&#xff09; 1. 物理層&#xff08;Physical Layer&#xff09; &#xff1a;網卡的物理接口、網線、光纖、集線器 2. 數據鏈路層&#xff08;Data Link Layer&#xff09;&#xff1a;交換機&#xf…

R 環境安裝指南

R 環境安裝指南 引言 R 是一種針對統計計算和圖形表示的編程語言和軟件環境。它廣泛應用于數據分析和統計建模領域。本指南旨在為用戶提供一個清晰、詳細的 R 環境安裝步驟,確保用戶能夠順利地開始使用 R 進行數據分析。 安裝前的準備 在開始安裝 R 之前,請確保您的計算機…

Cesium entity跟隨第一人稱視角

1.跟隨視角let firstView:any; const firstPerspective (entity: any) > {firstView () > {let curTime window.viewer.clock.currentTime;const pos entity.position.getValue(curTime);const orientation entity.orientation.getValue(curTime);if (pos &&…

傳輸層協議UDP與TCP

目錄 一. UDP 1.1 UDP協議段格式 1.2 UDP傳輸的特點 1.3 面向數據報 1.4 UDP緩沖區 1.5 報文的理解 二. TCP 2.1 TCP協議段格式 2.2 確認應答機制&#xff08;ACK&#xff09; 2.3 超時重傳機制 2.4 連接管理機制 為什么要三次握手&#xff1f; 三次&#xff1f;四…

SringBoot入門

文章目錄SpringBoot入門一、關于&#xff1a;約定大于配置二、創建SpringBoot項目---起步案例創建SpringBoot項目案例創建項目方式2&#xff1a;通過aliyun網站創建創建項目方式3---基于官方地址創建三、配置項目項目結構自定義配置四、SpringBoot原理&#xff08;重點&#xf…

ansible 版本升級

1. 服務器上查看對應ansible 可安裝的版本 yum info ansible 對比官網,服務器對應ansible 版本比較地址,不利于了解新版本的屬性。 2. 升級比較新的ansible 版本,安裝epel-release wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm rpm -iv…