1. 程式人生 > 其它 >Day25---學習Java第二彈

Day25---學習Java第二彈

2021-08-04

異常方法
下面的列表是 Throwable 類的主要方法:

1 public String getMessage()

返回關於發生的異常的詳細資訊。這個訊息在Throwable 類的建構函式中初始化了。


2 public Throwable getCause()

返回一個Throwable 物件代表異常原因。


3 public String toString()

使用getMessage()的結果返回類的串級名字。


4 public void printStackTrace()

列印toString()結果和棧層次到System.err,即錯誤輸出流。

5 public StackTraceElement [] getStackTrace()

返回一個包含堆疊層次的陣列。下標為0的元素代表棧頂,最後一個元素代表方法呼叫堆疊的棧底。

6 public Throwable fillInStackTrace()

用當前的呼叫棧層次填充Throwable 物件棧層次,新增到棧層次任何先前資訊中。

三、異常的使用及執行流程

1、異常的處理方案

try...catch、try...catch...finally、try...finally


try{
可能會發生的異常
}catch(異常型別 異常名(變數)){
針對異常進行處理的程式碼
}catch(異常型別 異常名(變數)){
針對異常進行處理的程式碼


}...
[finally{
釋放資原始碼;
}]

注意:

catch 不能獨立於 try 存在。

catch裡面不能沒有內容

在 try/catch 後面新增 finally 塊並非強制性要求的。

try 程式碼後不能既沒 catch 塊也沒 finally 塊。

try裡面越少越好。

try, catch, finally 塊之間不能新增任何程式碼。

finally裡面的程式碼最終一定會執行(除了JVM退出)

如果程式可能存在多個異常,需要多個catch進行捕獲。

異常如果是同級關係,catch誰前誰後沒有關係

如果異常之間存在上下級關係,上級需要放在後面


2、異常的執行流程


Error與Exception的區別:

Error(錯誤)是系統中的錯誤,程式設計師是不能改變的和處理的,是在程式編譯時出現的錯誤,只能通過修改程式才能修正。

一般是指與虛擬機器相關的問題,如系統崩潰,虛擬機器錯誤,記憶體空間不足方法呼叫棧溢等。

對於這類錯誤的導致的應用程式中斷,僅靠程式本身無法恢復和和預防,遇到這樣的錯誤,建議讓程式終止。

Exception(異常)表示程式可以處理的異常,可以捕獲且可能恢復。遇到這類異常,應該儘可能處理異常,使程式恢復執行,而不應該隨意終止異常。

在catch捕獲異常時,為什麼不考慮使用Throwable型別,而只是使用Exception來進行接收?

Throwable表示的範圍要比Exception大。實際上程式使用Throwable來進行處理,沒有任何語法問題,

但是卻會存在邏輯問題。因為此時出現的(或者說使用者能夠處理的)只有Exception型別,而如果使用Throwable接收,

還會表示可以處理Error的錯誤,而使用者是處理不了Error錯誤的,所以在開發中使用者可以處理的異常都要求以Exception類為主。

異常是一起處理好還是分開處理好?

根據實際的開發要求是否嚴格來決定。在實際的專案開發專案工作中,所有的異常是統一使用Exception處理還是分開處理,

完全根據開發者的專案開發標準來決定。如果專案開發環境嚴謹,基本上要求針對每一種異常分別進行處理,

並且要詳細記錄下異常產生的時間以及產生的位置,這樣可以方便程式維護人員進行程式碼的維護。

再次注意:處理多個異常時,捕獲範圍小的異常要放在捕獲範圍大的異常之前處理。

throw和throws的區別?

throw和throws都是在異常處理中使用的關鍵字,區別如下:

throw:指的是在方法中人為丟擲一個異常物件(這個異常物件可能是自己例項化或者丟擲已存在的);

throws:在方法的宣告上使用,表示此方法在呼叫時必須處理異常。

檢查型異常(Checked Exception)與非檢查型異常(Unchecked Exception)區別?

所有的檢查性異常都繼承自java.lang.Exception;

所有的非檢查性異常都繼承自java.lang.RuntimeEx ception。

檢查性異常和非檢查性異常最主要的區別在於其處理異常的方式:檢查性異常必須使用try catch或者throws等關鍵字進行處理,

否則編譯器會報錯;非檢查性異常一般是程式程式碼寫的不夠嚴謹而導致的問題,可以通過修改程式碼來規避。

常見的執行時異常:空指標異常(NullPointerException)、除零異常(ArithmeticException)、陣列越界異常(ArrayIndexOutOfBoundsException)等;

常見的檢查性異常:輸入輸出異常(IOException)、檔案不存在異常(FileNotFoundException)、SQL語句異常(SQLException)等。


assert關鍵字(瞭解)

在Java中,assert關鍵字是從JAVA SE 1.4 引入的,為了避免和老版本的Java程式碼中使用了assert關鍵字導致錯誤,

Java在執行的時候預設是不啟動斷言檢查的(這個時候,所有的斷言語句都 將忽略!),如果要開啟斷言檢查,則需要用開關-enableassertions或-ea來開啟。

assert關鍵字語法很簡單,有兩種用法:

assert <boolean表示式>

如果<boolean表示式>為true,則程式繼續執行。

如果為false,則程式丟擲AssertionError,並終止執行。

assert <boolean表示式> : <錯誤資訊表示式>

如果<boolean表示式>為true,則程式繼續執行。

如果為false,則程式丟擲java.lang.AssertionError,並輸入<錯誤資訊表示式>。

例:

1 public class Test {
2     public static void main(String[] args) {
3         int a = 10;
4         int b = 2;
5         assert a == 10:"a不等於10";
6         System.out.println("a="+a);
7     }
8 }

例:

1 public class Test {
2     public static void main(String[] args) {
3         int a = 10;
4         int b = 2;
5         assert a == 20:"a不等於20";
6         System.out.println("a="+a);
7     }
8 }