Python 和 Java 基礎對比 06 —— 異常處理機制

Python 和 Java 基礎對比 06 —— 異常處理機制

Python 和 Java 基礎對比 06 —— 異常處理機制


這是一個系列文章,如果你是零基礎,建議在 主頁翻看往期文章,建議收藏!

一、Python的異常處理機制

1、異常定義

異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。

2、Python 中的異常處理

python 是一種解釋型語言,也就是說沒有編譯,所有它沒有檢查時異常,只有運行時異常。

3、Python 異常分類

Python 和 Java 基礎對比 06 —— 異常處理機制

4、Python 異常關鍵字

python 中的異常處理相比java來說,要簡單一些


try:捕獲異常,類似於 java 中的 try
except:處理異常,類似於 java 中的 catch
finally:不管是否捕獲到異常都會被執行,類似於 java 中 的 finally
raise:拋出異常,類似於 java 中的 throw

① try ... except

Python 和 Java 基礎對比 06 —— 異常處理機制

在python的異常中,還有一個萬能異常:Exception

② try ... except ... finally

Python 和 Java 基礎對比 06 —— 異常處理機制

輸出結果:

Python 和 Java 基礎對比 06 —— 異常處理機制


③ raise

Python 和 Java 基礎對比 06 —— 異常處理機制

輸出結果:

Python 和 Java 基礎對比 06 —— 異常處理機制

二、Java的異常處理機制

異常定義

Java 異常是 Java 提供的一種識別及響應錯誤的一致性機制。

異常架構

Python 和 Java 基礎對比 06 —— 異常處理機制

1、 Throwable

Java 語言中所有錯誤與異常的超類。

Throwable 包含兩個子類:Error(錯誤)和 Exception(異常)。

Throwable 包含了其線程創建時線程執行堆棧的快照,它提供了 printStackTrace() 等接口用於獲取堆棧跟蹤數據等信息。

2、 Error(錯誤)

特點:此類錯誤一般表示代碼運行時 JVM 出現問題。

通常有 Virtual MachineError(虛擬機運行錯誤)、NoClassDefFoundError(類定義錯誤)等。

比如 OutOfMemoryError:內存不足錯誤;StackOverflowError:棧溢出錯誤。

此類錯誤發生時,JVM 將終止線程。

注意: 這些錯誤是不受檢異常,非代碼性錯誤,程序本身不可以處理。

3、 Exception(異常)分類

程序本身可以捕獲並且可以處理的異常。

Exception 這種異常又分為兩類:編譯時異常(除RuntimeException)和運行時異常(RuntimeException)。

① 編譯時異常

簡單說就是你敲代碼時提示的異常。

比如 ClassNotFoundException(沒有找到指定的類異常),IOException(IO流異常)。

最常見的就是 IO 流異常。

② 運行時異常(RuntimeException)

NullPointerException 空指針異常



Python 和 Java 基礎對比 06 —— 異常處理機制

ArrayIndexOutBoundException 數組下標越界異常

Python 和 Java 基礎對比 06 —— 異常處理機制



ArithmeticExecption 算術異常

Python 和 Java 基礎對比 06 —— 異常處理機制

ClassCastException 類型轉換異常

這個在涉及到類時再補充。


4、受檢異常(checked exception)與非受檢異常(unchecked exception)

① 受檢異常

編譯器要求必須處理的異常,比如 ClassNotFoundException

② 非受檢異常

編譯器不會進行檢查並且不要求必須處理的異常。該類異常包括運行時異常(RuntimeException極其子類)和錯誤(Error)。

注意:這裡包含 Error。比如 NoClassDefFoundError ,引起該異常的原因是 JVM 或 ClassLoader 嘗試加載某類時在內存中找不到該類的定義,該動作發生在運行期間,即編譯時該類存在,但是在運行時卻找不到了,可能是變異後被刪除了等原因導致;

5、異常關鍵字

① try – 用於監聽。將要被監聽的代碼(可能拋出異常的代碼)放在 try 語句塊之內,當 try 語句塊內發生異常時,異常就被拋出。

② catch – 用於捕獲異常。catch 用來捕獲 try 語句塊中發生的異常。

③ finally – finally 語句塊總是會被執行。它主要用於回收在 try 塊裡打開的物理資源(如數據庫連接、網絡連接和磁盤文件)。只有 finally 塊,執行完成之後,才會回來執行 try 或者 catch 塊中的 return 或者 throw 語句,如果finally 中使用了 return 或者 throw 等終止方法的語句,則就不會跳回執行,直接停止。

④ throw – 用於拋出異常。

⑤ throws – 用在方法簽名中,用於聲明該方法可能拋出的異常。

Python 和 Java 基礎對比 06 —— 異常處理機制

I、try ... catch 的基本用法

Python 和 Java 基礎對比 06 —— 異常處理機制

Python 和 Java 基礎對比 06 —— 異常處理機制

II、try ... catch ... finally

Python 和 Java 基礎對比 06 —— 異常處理機制

Python 和 Java 基礎對比 06 —— 異常處理機制

最終執行了 finally

III、throws 和 throw

throws 是用於在方法聲明拋出的異常,而 throw 是用於拋出異常。

throw 關鍵字用在方法內部,只能用於拋出一種異常,用來拋出方法或代碼塊中的異常,受查異常和非受查異常都可以被拋出。

throws 關鍵字用在方法聲明上,可以拋出多個異常,用來標識該方法可能拋出的異常列表。一個方法用 throws 標識了可能拋出的異常列表,調用該方法的方法中必須包含可處理異常的代碼,否則也要在方法簽名中用 throws 關鍵字聲明相應的異常。

Python 和 Java 基礎對比 06 —— 異常處理機制

自定義異常

Python 和 Java 基礎對比 06 —— 異常處理機制

5、易混淆地方

當 catch 出現多次,程序如何執行?

Python 和 Java 基礎對比 06 —— 異常處理機制

輸出結果:

Python 和 Java 基礎對比 06 —— 異常處理機制

catch (Exception e) 一定要放到最後面,當有多個 catch 時,相當於 if-else if-else 語句,只執行其中一個。


分享到:


相關文章: