天天看點

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一次隻能執行一個線程,是以隻能随機交替執行,這個就是多線程并發