JAVA基礎學習總結,day16(異常)

異常

概述:指的是程序在執行過程中,出現的非正常的情況,最終會導致JVM的非正常運行
注意:

  1. 在java等面向對象的編程語言中,異常本身是一個類,產生異常就是創建異常對象並拋出了一個異常對象。java處理異常的方式是中斷處理。
  2. 異常指的並不是語法錯誤,語法錯了,編譯不通過,不會產生字節碼文件,根本不能運行

異常的體系:
Throwable異常的頂層類,是java語言中所有錯誤或異常的父類
Error:嚴重錯誤Error,無法通過處理的錯誤,只能事先避免,好比絕症
例如:內存泄漏,數據庫崩潰
Exception:表示異常,異常產生後程序員可以通過代碼的方式糾正,使程序繼續運行,是必須要處理的,

異常的分類:
編譯異常:在編譯期間出現的異常,編譯異常如果編譯期間不處理,是通不過編譯的
除了RuntimeException及其子類都是表示的編譯異常
運行異常:在運行期間出現的異常,運行異常如果編譯期間不處理,可以通過編譯的 RuntimeException及其子類都是表示運行異常

異常的產生過程解析:

  1. 創建異常對象,封裝異常的信息
  2. throw拋出異常
  3. JVM接收異常,併發送異常到控制檯,終止程序運行

java異常處理的五個關鍵字:try、catch、finally、throw、throws

throw關鍵字
概述:在java中,提供一一個throw關鍵字,它用來拋出一個指定的異常對象
格式:
throw new 異常類名(參數);
位置:
throw用在方法內,用來拋出一個異常對象,將這個異常對象傳遞到調用者處,並結束當前方法的執行

throws關鍵字
第一種處理異常的方式:聲明處理異常
聲明異常:將問題標識出來,報告給調用者。
如果方法內通過throw拋出了編譯時異常而沒有捕獲處理,那麼必須通過throws進行聲明,讓調用者去處理

關鍵字throws運用於方法聲明 之上,用於表示當前方法不處理異常,而是提醒該方法的調用者來處理異常(拋出異常)

聲明異常格式:
修飾符 返回值類型 方法名(參數)throws 異常類名1,異常類名2…{ }

注意事項:

  1. throws用於進行異常類的聲明,若該方法可能有多重異常情況產生,那麼在throws後面可以寫多個異常類,用逗號隔開
  2. 如果方法需要使用throws拋出多個異常來處理異常,假設這多個異常是父子類關係,那麼就可以直接拋父類異常

try…catch
捕獲異常:java中對異常有針對性的語句進行捕獲,可以堆出現的異常進行制定方式的處理
格式:
try{
編寫可能出現異常的代碼
}catch(異常的類型 變量名){
處理異常的代碼
//記錄日誌/打印異常信息/繼續拋出異常

注意:

  1. try和catch都不能單獨使用,必須連用
  2. 如果try中的代碼出現了異常,那麼try中出現異常位置後面的代碼就不會執行了
  3. 如果try中的代碼出現了異常,程序還是會繼續往下執行,如果throws拋出異常的方式處理異常,出現異常之後會終止程序的運行
  4. 如果try中的代碼出現了異常,那麼就會執行catch中的代碼,如果try中的代碼沒有出現異常,那麼就不會執行catch後面的代碼,不管try中是否出現異常,程序都都會繼承往下執行

Throwable類中定義了一些查看方法
public String getMessage() :獲取異常的描述信息,原因(提示給用戶的時候,就提示錯誤原因。
public String toString() :獲取異常的類型和異常描述信息(不用)。
public void printStackTrace() :打印異常的跟蹤棧信息並輸出到控制檯。

多個異常使用捕獲又該如何處理呢?

  1. 多個異常分別處理
  2. 多個異常一次捕獲,多次處理
  3. 多個異常一次捕獲,一次處理

finally關鍵字
概述:有一些特定的代碼無論異常是否發生,都需要執行。另外,因爲異常會引發程序跳轉,導致有些語句執行 不到。而finally就是解決這個問題的,在finally代碼塊中存放的代碼都是一定會被執行的。
格式:
try{
編寫可能出現異常的代碼
}catch(異常的類型 變量名){
處理異常的代碼
//記錄日誌/打印異常信息/繼續拋出異常
}finally{
//正常情況永遠都會執 一般寫釋放資源的代碼

異常注意:

  1. 運行時異常被拋出可以不處理。即不捕獲也不聲明拋出。
  2. 如果父類拋出了多個異常,子類覆蓋父類方法時,只能拋出相同的異常或者是他的子集。
  3. 父類方法沒有拋出異常,子類覆蓋父類該方法時也不可拋出異常。此時子類產生該異常,只能捕獲處理,不能聲明拋出
  4. 當多異常處理時,捕獲處理,前邊的類不能是後邊類的父類
  5. 在try/catch後可以追加finally代碼塊,其中的代碼一定會被執行,通常用於資源回收。
  6. 如果finally有return語句,永遠返回finally中的結果,避免該情況.

並行:指兩個或多個事件在同一時刻發生(同時發生)
併發:指連個或多個事件在同一個時間段內發生

線程:其實就是進程的最小可執行單元
進程:其實就是應用程序可執行單元,.exe文件

結論:一個應用程序可以有多個進程,一個進程可以有多條線程
注意 :一個java程序就只有一個進程,而一個進程一次只能執行一條線程,所以在java中只有多線程併發
線程調度:隨機調度,JVM採用的是搶佔式調度,沒有采用分時調度, 因此可以能造成多線程執行結果的的隨機性。

多線程並行:多條線程同時執行
多線程併發:多條線程同時請求執行,但是CPU一次只能執行一個線程,所以只能隨機交替執行,這個就是多線程併發

發佈了28 篇原創文章 · 獲贊 13 · 訪問量 1790
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章