跳到主要內容

精選文章

Kotlin Day 5 : Try-Catch Exceptions

 



Kotlin 總綱



--

在程式設計中,例外是指在程式執行過程中發生的錯誤或異常情況。根據處理方式的不同,例外可以分為兩類:檢查型例外(Checked Exceptions)未檢查型例外(Unchecked Exceptions)

檢查型例外(Checked Exceptions)

檢查型例外是指在編譯時必須顯式處理或聲明的例外。這類例外通常是由於外部因素引起的,例如文件未找到或網絡連接失敗。Java 是一個典型支持檢查型例外的語言,開發者必須在方法簽名中使用 throws 關鍵字聲明這些例外,並在調用這些方法時使用 try-catch 塊來處理它們。例如:

    public void readFile() throws IOException { // 可能會拋出 IOException }

如果調用這個方法的程式碼沒有處理這個例外,編譯器會報錯,強迫開發者處理這個例外。

未檢查型例外(Unchecked Exceptions)

未檢查型例外是指在編譯時不需要顯式處理的例外,這類例外通常是由程式邏輯錯誤引起的,例如空指針引用或數組索引越界。這些例外在運行時發生,開發者可以選擇捕獲或不捕獲它們。Java 中的 RuntimeException 及其子類別就是未檢查型例外的例子。由於這些例外通常是由程式錯誤引起的,因此不需要在編譯時強制處理。

Kotlin 的例外處理

Kotlin 設計上不支持檢查型例外,這是因為 Kotlin 的設計者認為檢查型例外會增加開發的複雜性和冗餘代碼,並且不會顯著提高程式碼的質量。以下是 Kotlin 只支持未檢查型例外的幾個原因:

  • 簡化代碼:不需要在每個方法中聲明可能拋出的例外,這樣可以減少冗長的代碼,讓程式碼更加簡潔明瞭。

  • 提高開發效率:開發者不必在每次調用可能拋出例外的方法時都進行處理,這樣可以專注於業務邏輯,而不是例外處理的繁瑣細節。

  • 避免不必要的錯誤處理:檢查型例外有時會導致開發者捕獲不必要的例外,從而使程式碼變得複雜且難以維護。Kotlin 的設計理念是讓開發者根據實際需要選擇性地處理例外。

總之,Kotlin 的例外處理機制旨在提供一種更靈活和簡潔的方式來處理運行時錯誤,讓開發者能夠專注於程式的核心邏輯,而不是被繁瑣的例外處理所困擾。

===

Try-Catch

Kotlin 的 try-catch 例外處理機制是一種用於處理程式執行過程中可能發生的錯誤或異常的技術。這種機制可以幫助開發者優雅地處理錯誤,避免程式崩潰,並保持程式的正常運行。

基本概念

在 Kotlin 中,所有的例外類別都繼承自 Throwable 類別。如上所說,Kotlin 只支持未檢查的例外(unchecked exceptions),這意味著開發者不需要特別聲明可能拋出的例外,這與 Java 的檢查例外(checked exceptions)有所不同。

try-catch 結構

  • try 區塊:這是放置可能會拋出例外的程式碼的區域。如果在這個區塊中發生了例外,程式將跳轉到對應的 catch 區塊。

  • catch 區塊:這裡是處理捕獲到的例外的地方。可以根據不同的例外類型使用多個 catch 區塊來處理不同的例外情況。

範例


我們以這個 EchoServer.kt 的程式為例 - Github




在這個範例中,當嘗試將一個無法轉換為整數的字串轉換時,會拋出 NumberFormatException,然後 catch 區塊捕獲並處理這個例外。

例外類型

Kotlin 中的例外主要分為以下幾類:

  • 空指針例外(NullPointerException):當嘗試在空對象上調用屬性或方法時拋出。

  • 算術例外(ArithmeticException):當進行無效的算術運算(例如除以零)時拋出。

  • 數組索引越界例外(ArrayIndexOutOfBoundsException):當嘗試訪問數組中無效的索引時拋出。

使用 try-catch 作為表達式

Kotlin 允許將 try-catch 作為表達式使用,這意味著可以將 try-catch 的結果賦值給變數。例如上面那個例子, 如果轉換成功,port 將會是轉換後的整數;如果失敗,則用 default 值 5000。




留言

熱門文章