畢向東Java視訊學習筆記【Day11 異常+object類】
Java_Day11 異常+object
異常
異常:是在執行時期發生的不正常情況。。
在java中用類的形式對不正常情況進行了描述和封裝物件。
描述不正常的情況的類,就稱為異常類。
以前正常流程程式碼和問題處理程式碼相結合,
現在將正常流程程式碼和問題處理程式碼分離。提高閱讀性.
其實異常就是java通過面向物件的思想將問題封裝成了物件.
用異常類對其進行描述。
不同的問題用不同的類進行具體的描述。 比如角標越界。空指標等等。
異常體系.
問題很多,意味著描述的類也很多,
將其共性進行向上抽取,形成了異常體系。
最終問題(不正常情況)就分成了兩大類。
Throwable:無論是
//該體系的特點就在於Throwable及其所有的子類都具有可拋性。
可拋性到底指的是什麼呢?怎麼體現可拋性呢?
其實是通過兩個關鍵字來體現的。
throws throw ,凡是可以被這兩個關鍵字所操作的類和物件都具備可拋性.
|--1,一般不可處理的。Error
特點:是由jvm丟擲的嚴重性的問題。
這種問題發生一般不針對性處理。直接修改程式
|--2,可以處理的。Exception
該體系的特點:
子類的字尾名都是用其父類名作為字尾,閱讀性很理想。
異常-自定義異常&異常類的丟擲throws
對於角標是整數不存在,可以用角標越界表示,
對於負數為角標的情況,準備用負數角標異常來表示。
負數角標這種異常在java中並沒有定義過。
那就按照java異常的建立思想,面向物件,將負數角標進行自定義描述。並封裝成物件。
這種自定義的問題描述成為自定義異常。
注意:如果讓一個類稱為異常類,必須要繼承異常體系,因為只有稱為異常體系的子類才有資格具備可拋性。
才可以被兩個關鍵字所操作,throws throw
編譯器先檢查語法錯誤,才會檢查邏輯錯誤
自定義異常類要注意的地方:
1.類中的方法必須使用throws丟擲自定義的異常類
2.方法中使用丟擲時必須使用throw丟擲自定義的異常類
3.建立的異常類必須是子類,而且要繼承父類
4.自定義異常類中,有一個無參建構函式(不是必需的,會自動預設一個無參建構函式),還有一個有參建構函式,裡面必須有super(x)繼承父類
-面向物件(異常-編譯時檢測異常和執行時異常的區別&throw和throws的區別)
異常的分類:
1,編譯時被檢測異常:只要是Exception和其子類都是,除了特殊子類RuntimeException體系。
這種問題一旦出現,希望在編譯時就進行檢測,讓這種問題有對應的處理方式。
這樣的問題都可以針對性的處理。
2,編譯時不檢測異常(執行時異常):就是Exception中的RuntimeException和其子類。
這種問題的發生,無法讓功能繼續,運算無法進行,更多是因為呼叫者的原因導致的而或者引發了內部狀態的改變導致的。
那麼這種問題一般不處理,直接編譯通過,在執行時,讓呼叫者呼叫時的程式強制停止,讓呼叫者對程式碼進行修正。
所以自定義異常時,要麼繼承Exception。要麼繼承RuntimeException。
throws 和throw的區別。
1,throws使用在函式上。
throw使用在函式內。
2,throws丟擲的是異常類,可以丟擲多個,用逗號隔開。
throw丟擲的是異常物件。
.06-面向物件(異常-異常捕捉trycatch)
.07 多catch
多catch中,會從第一個catch開始查
面試時:如果遇到這兩個catch都沒法解決的怎麼辦?
在最下面加上catch(exception e) ,這個能解決所有的丟擲
多catch中,父類的catch放在最下面。
用了catch後,就沒必要用丟擲throw 了
如果只有try 沒catch 一定要有throw
有catch就有處理
異常處理原則
宣告就是(throw這個語句)
當出現了異常報警之後,才使用try-catch處理問題
1.函式內部如果丟擲需要檢測的異常,那麼函式上必須要宣告,否則必須在函式內用try-catch捕捉,否則編譯失敗。
2.如果呼叫到了宣告異常的函式,要麼try-catch 要麼throw ,否則編譯失敗。
3.什麼時候catch 什麼時候throw呢?
a) 功能內容可以解決,用catch。
b) 解決不了,用throw告訴呼叫者,由呼叫者解決。
4.一個功能如果丟擲了多個異常,那麼呼叫時,必須有對應多個catch進行鍼對性的處理。
內部有幾個需要監測的異常,就拋幾個異常,丟擲幾個,就catch幾個。
finally程式碼塊
Finally是一定會執行的程式碼
Finally通常用於關閉(釋放)資源。
Try-catch-finally程式碼塊組合特點:
1.try catch finally
2.Try catch(多個) 當沒有必要資源需要釋放時,可以不用定義finally
3.Try finally
異常無法直接catch處理,但是資源必須先關閉。
Try開闢了資源 就一定要關閉資源。如果沒有關閉資源,就一定要用finally關閉資源。
面向物件(異常-異常注意事項)
異常的注意事項:
(面試注意的問題)
1,子類在覆蓋父類方法時,父類的方法如果丟擲了異常,
那麼子類的方法只能丟擲父類的異常或者該異常的子類。
解釋1: 38行只能拋throws A或者B ,不能拋C
2,如果父類丟擲多個異常,那麼子類只能丟擲父類異常的子集。
簡單說:子類覆蓋父類只能丟擲父類的異常或者子類或者子集。
注意:如果父類的方法沒有丟擲異常,那麼子類覆蓋時絕對不能拋,就只能try .
Equal方法
比較的是地址 地址相等,才能返回true
.02equal方法覆蓋
一般都會覆蓋此方法,根據物件的特有內容,建立判斷物件是否相同的一句。