不要再說 Python 難學,對比 Java 學習後,會容易很多

不要再說 Python 難學,對比 Java 學習後,會容易很多

不要再說 Python 難學,對比 Java 學習後,會容易很多


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

一、Python的異常處理機制

1、異常定義

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

2、Python 中的異常處理

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

3、Python 異常分類

不要再說 Python 難學,對比 Java 學習後,會容易很多

4、Python 異常關鍵字

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


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

① try ... except

不要再說 Python 難學,對比 Java 學習後,會容易很多

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

② try ... except ... finally

不要再說 Python 難學,對比 Java 學習後,會容易很多

輸出結果:

不要再說 Python 難學,對比 Java 學習後,會容易很多


③ raise

不要再說 Python 難學,對比 Java 學習後,會容易很多

輸出結果:

不要再說 Python 難學,對比 Java 學習後,會容易很多

二、Java的異常處理機制

異常定義

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

異常架構

不要再說 Python 難學,對比 Java 學習後,會容易很多

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 學習後,會容易很多

ArrayIndexOutBoundException 數組下標越界異常

不要再說 Python 難學,對比 Java 學習後,會容易很多



ArithmeticExecption 算術異常

不要再說 Python 難學,對比 Java 學習後,會容易很多

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 學習後,會容易很多

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

不要再說 Python 難學,對比 Java 學習後,會容易很多

不要再說 Python 難學,對比 Java 學習後,會容易很多

II、try ... catch ... finally

不要再說 Python 難學,對比 Java 學習後,會容易很多

不要再說 Python 難學,對比 Java 學習後,會容易很多

最終執行了 finally

III、throws 和 throw

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

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

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

不要再說 Python 難學,對比 Java 學習後,會容易很多

自定義異常

不要再說 Python 難學,對比 Java 學習後,會容易很多

5、易混淆地方

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

不要再說 Python 難學,對比 Java 學習後,會容易很多

輸出結果:

不要再說 Python 難學,對比 Java 學習後,會容易很多

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


分享到:


相關文章: