一,異常的概述
異常(exception):異常是指程式執行是發生的不正常事件;可以被異常機制處理,程式能夠繼續執行下去。
錯誤(error):錯誤不能構被處理,發生錯誤後,程式就終止,需要修改原始碼才能解決。
二,異常體系結構
1,異常的頂級父類是throwable類。
2,其下分為exception和error兩個子類
3,異常分為執行時異常(runtimeexception)和非執行是異常(檢測異常)。
4,執行期異常在編譯期不會報錯,但是執行會終止,所以需要對其進行控制,常見的執行時異常,
nullpointerexception 空指標異常
classcastexception 型別轉換異常
indexoutofbound***ception 索引越界異常
arithmeticexception 算數異常
5,除去基本父類是runtimeexception(或者其子類的),都是非執行異常,在編譯期會報錯,必須進行處理
如: ioexception io流異常/輸入輸出異常
sqlexception sql異常
三,異常處理流程
1,try-catch-finally
(1)try塊
是乙個普通的普通的作用域,try關鍵字開頭,在其中包裹可能產生的違例。
一旦丟擲異常,其後面的**將不在執行
(2)catch塊
違例控制器在try後面,並用catch捕獲。用法catch(異常型別 變數)。
catch可以有多個,如果存在父子關係,那麼子類catch塊需放在父類前面(否則編譯錯誤),但try塊丟擲的異常與catch中的異常(包含執行是異常)匹配,匹配到誰執行誰。
catch塊中宣告的異常是丟擲異常的父類,則也會捕獲。如果幾個異常處理的方式相同則可以在catch塊中用
單或(|)分隔不同的異常。
(3)finally
try塊後面必須跟乙個catch塊或者finally塊。
無論是否有異常,(就算在try或者cathch塊中有return;)finally塊都會執行
system.exit(0),退出虛擬機器,finally不執行。
2,throw和throws
(1)throws用在方法簽名上,後面跟異常型別,表明可能會丟擲的異常。
用法void f() throws exception{}
使用這種方式後,在方法中就算丟擲異常,也不一定需要處理,誰呼叫此方法,誰就需要處理此異常,或者繼續向上丟擲異常。
(2)throw 丟擲異常後面接異常的例項。
異常不一定是程式被動產出的,也可以通過throw主動丟擲異常。
或者在抓住一種異常後,處理掉然後丟擲另外一種異常。
四,自定義違例
1,建立異常型別,同建立類一樣,但需要繼承一種異常。
class myexception extends exception{}
2,內部建立構造器,與父類相對應,用super關鍵字呼叫父類的構造器。
五,違例限制
父類或者介面中的方法可以丟擲異常。
1,方法
(1)如果子類方法不與父類或介面構成重寫,則可以隨意丟擲異常。
(2)子類的方法與父類或者介面構成重寫。
子類方法throws後的異常不能大於父類方法的異常。
子類方法丟擲的異常不能大於簽名後跟的異常型別。
父類方法丟擲異常,但是子類方法可以不丟擲異常。
乙個類實現了父類和介面的的同一種方法(其丟擲的異常不同),那麼子類丟擲的異常必須同時屬於父類和介面丟擲的異常,如果不滿足,則不能丟擲異常。
2,構造器
父類構造器throws異常後,所有其的子類必須解決父類的異常或者throws更大的異常,
而且可以新增其他不同型別的異常。
java異常體系
基類是throwable,直接子類有error以及exception.其中error表示的是,系統級別的錯誤,是乙個unchecked錯誤,無需特別處理,盡量在系統級別處理.exception分為checked exception與unchecked exception.其 中unchecked e...
Java異常體系(粗糙版)
throwable異常體系 error 錯誤 aterror outofmemory exception 異常 runtimeexception 執行時異常 classcastexception nullpointexception airthmeticexception indexoutofexc...
Java異常處理
package test public class testexception boolean testex throws exception catch exception e finally boolean testex1 throws exception system.out.println ...