前言: Java 中 Exception 繼承自Throwable。在程序的編譯、運行過程中,JVM檢測、捕獲這些異常,保證程序運行的健壯性。
Exception 分類
Exception 總共有兩大類:
- Unchecked Exception(Runtime Exception)
- Checked Exception(非Runtime Exception)
提醒:所有的RuntimeException都是Unchecked Exception,其余的全是CheckedException.
區別:Unchecked 與Checked 區別在于,對于CheckedException,我們必須對其檢查處理,也就是必須添加try…catch…捕獲異常、或者throw 拋出異常。而對于UncheckedException,可以選擇處理,也可以不處理。推薦不處理這些異常。
常見異常.png
異常處理
- try 塊:用于捕獲異常。其后可接零個或多個catch塊,若沒有catch塊,則必須跟一個finally塊。
- catch 塊:用于處理try捕獲到的異常。
- finally 塊:無論是否捕獲或處理異常,finally塊里的語句都會被執行。當在try塊或catch塊中遇到return語句時,finally語句塊將在方法返回之前被執行。其實 finally 語句塊是在 try 或者 catch 中的 return 語句之前執行的。更加一般的說法是,finally 語句塊應該是在控制轉移語句之前執行,控制轉移語句除了 return 外,還有 break 和 continue。
在以下特殊情況下,finally塊不會被執行:
1)在finally語句塊中 發生了異常。
2)try或者catch中System.exit(0)退出程序。
3)程序所在的線程死亡。
4)計算機斷電、失火、或遭遇病毒攻擊
異常處理.png
- 代碼示例:
//該代碼直接借用的@Dandan Meng 的,他寫的很棒,我就沒有再去創建
public class ExceptionTest
{
public static void main(String[] args)
{
int c = 0;
try
{
int a = 3;
int b = 0;
// 這塊代碼出現了異常 ,除數不能為0
c = a / b;
// 那么異常之后的代碼都不會被執行
System.out.println("Hello World");
}
catch (ArithmeticException e)
{
e.printStackTrace();
}
finally
{
//不管有沒有發生異常,finally語句塊都會被執行
System.out.println("Welcome");
}
System.out.println(c);
// 當b為0時,有異常,輸出為c的初始值0
}
}
小結
關于異常,知識點不是很多,網絡上資料很全面,我寫的這些大部分摘抄自網絡,下面附上比較不錯的參考博客
參考鏈接:
http://www.cnblogs.com/mengdd/archive/2013/02/03/2890923.html
https://docs.oracle.com/javase/8/docs/api/overview-tree.html
https://www.ibm.com/developerworks/cn/java/j-lo-finally/