Java常用API_異常機制和File類
阿新 • • 發佈:2021-11-08
第十六章 異常機制和File類
16.1 異常機制(重點)
16.1.1 基本概念
- 異常就是"不正常"的含義,在Java語言中主要指程式執行中發生的不正常情況。
- java.lang.Throwable類是Java語言中錯誤(Error)和異常(Exception)的超類。
- 其中Error類主要用於描述Java虛擬機器無法解決的嚴重錯誤,通常無法編碼解決,如:JVM掛掉了等。
- 其中Exception類主要用於描述因程式設計錯誤或偶然外在因素導致的輕微錯誤,通常可以編碼解決,如:0作為除數等。
16.1.2 異常的分類
- java.lang.Exception類是所有異常的超類,主要分為以下兩種:
- RuntimeException - 執行時異常,也叫作非檢測性異常
- IOException和其它異常 - 其它異常,也叫作檢測性異常,所謂檢測性異常就是指在編譯階段都能被編譯器檢測出來的異常。
- 其中RuntimeException類的主要子類:
- ArithmeticException類 - 算術異常
- ArrayIndexOutOfBoundsException類 - 陣列下標越界異常
- NullPointerException - 空指標異常
- ClassCastException - 型別轉換異常
- NumberFormatException - 數字格式異常
- 注意:
- 當程式執行過程中發生異常但又沒有手動處理時,則由Java虛擬機器採用預設方式處理異常,而預設處理方式就是:列印異常的名稱、異常發生的原因、異常發生的位置以及終止程式。
16.1.3 異常的避免
- 在以後的開發中儘量使用if條件判斷來避免異常的發生。
- 但是過多的if條件判斷會導致程式的程式碼加長、臃腫,可讀性差。
16.1.4 異常的捕獲
- 語法格式
try {
編寫可能發生異常的程式碼;
}
catch(異常型別 引用變數名) {
編寫針對該類異常的處理程式碼;
}
...
finally {
編寫無論是否發生異常都要執行的程式碼;
}
- 注意事項
- a.當需要編寫多個catch分支時,切記小型別應該放在大型別的前面;
- b.懶人的寫法:
- catch(Exception e) {}
- c.finally通常用於進行善後處理,如:關閉已經開啟的檔案等。
- 執行流程
- try {
- a;
- b; - 可能發生異常的語句
- c;
- }catch(Exception ex) {
- d;
- }finally {
- e;
- }
- 當沒有發生異常時的執行流程:a b c e;
- 當發生異常時的執行流程:a b d e;
- try {
16.1.5 異常的丟擲
基本概念
- 在某些特殊情況下有些異常不能處理或者不便於處理時,就可以將該異常轉移給該方法的呼叫者,這種方法就叫異常的丟擲。當方法執行時出現異常,則底層生成一個異常類物件丟擲,此時異常程式碼後續的程式碼就不再執行。
語法格式
- 訪問許可權 返回值型別 方法名稱(形參列表) throws 異常型別1,異常型別2,...{ 方法體; }如:public void show() throws IOException{}
方法重寫的原則
- a.要求方法名相同、引數列表相同以及返回值型別相同,從jdk1.5開始支援返回子類型別;
- b.要求方法的訪問許可權不能變小,可以相同或者變大;
- c.要求方法不能丟擲更大的異常;
注意:
- 子類重寫的方法不能丟擲更大的異常、不能丟擲平級不一樣的異常,但可以丟擲一樣的異常、更小的異常以及不丟擲異常。
經驗分享
- 若父類中被重寫的方法沒有丟擲異常時,則子類中重寫的方法只能進行異常的捕獲處理。
- 若一個方法內部又以遞進方式分別呼叫了好幾個其它方法,則建議這些方法內可以使用丟擲的方法處理到最後一層進行捕獲方式處理。
16.1.6 自定義異常
- 基本概念
- 當需要在程式中表達年齡不合理的情況時,而Java官方又沒有提供這種針對性的異常,此時就需要程式設計師自定義異常加以描述。
- 實現流程
- a.自定義xxxException異常類繼承Exception類或者其子類。
- b.提供兩個版本的構造方法,一個是無參構造方法,另外一個是字串作為引數的構造方法。
- 異常的產生
- throw new 異常型別(實參);
- 如:
- throw new AgeException("年齡不合理!!!");
- Java採用的異常處理機制是將異常處理的程式程式碼集中在一起,與正常的程式程式碼分開,使得程式簡潔、優雅,並易於維護。
16.2 File類(重點)
16.2.1 基本概念
- java.io.File類主要用於描述檔案或目錄路徑的抽象表示資訊,可以獲取檔案或目錄的特徵資訊,如:大小等。
16.2.2 常用的方法
- 案例題目
- 遍歷指定目錄以及子目錄中的所有內容並打印出來。