Java程序運行過程中,經常會遇到異常情況,遇到最多的應該是NullPointException異常。今天有空,對異常進行了一次小總結。
Java規範中Exception是Throwable子類,Throwable還有另一個子類Error。Error一般是虛擬機拋出的比Exception更嚴重的異常,根據直譯也可以叫做錯誤,屬於虛擬機系統級錯誤,程序基本不可以通過後續代碼修復,這裏不做重點討論。
Exception下面有許多繼承子類
Exception衆多子類可以分爲兩種一種是受檢異常(Checked exceptions),另一種是非受檢異常(Checked exceptions)。
針對這兩種異常,它們處理方式是一樣。兩種處理方式, 1、在方法調用時處理掉catch,異常處理以後後續可以繼續執行 2、向上層繼續拋出throws,後續代碼不再執行。以非受檢異常說明這兩種處理方式
catch處理
package com.cib.bean;
import org.junit.Test;
public class Order {
private int i;
@Test
public void test01() {
try {
i = 10 / 0;//以一種比較明顯錯誤說明
} catch (ArithmeticException e) {
e.printStackTrace();
}
System.out.println("代碼繼續執行");
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
java.lang.ArithmeticException: / by zero
at com.cib.bean.Order.test01(Order.java:10)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
代碼繼續執行
單元測試時候,運行到i = 10 / 0; 拋出了算術異常,這個時候我們對異常進行了處理,不影響後續打印代碼可以繼續執行。
throws處理
package com.cib.bean;
import org.junit.Test;
public class Order {
private int i;
public void test01() throws ArithmeticException{
i=10/0;
System.out.println("代碼繼續執行");
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
這個時候運行,程序執行到 i=10/0;時系統直接報出異常,後續代碼不繼續執行,System.out.println("代碼繼續執行"); 沒有執行下去,程序終止。以上兩種處理方式比較,可以得到這樣的結論:
對於出現異常代碼throws,那麼出現異常處代碼其後代碼不再繼續執行。如果catch處理,不影響異常代碼後續代碼處理。
另外,當我們在其他方法中調用一段代碼,這段代碼通過throws拋出異常,這個時候需要也對異常進行處理,否則編譯不通過。
end~~~歡迎交流,指正