前言: Java 中 Exception 繼承自Throwable。在程序的編譯矫膨、運(yùn)行過(guò)程中,JVM檢測(cè)期奔、捕獲這些異常侧馅,保證程序運(yùn)行的健壯性。
Exception 分類
Exception 總共有兩大類:
- Unchecked Exception(Runtime Exception)
- Checked Exception(非Runtime Exception)
提醒:所有的RuntimeException都是Unchecked Exception呐萌,其余的全是CheckedException.
區(qū)別:Unchecked 與Checked 區(qū)別在于馁痴,對(duì)于CheckedException,我們必須對(duì)其檢查處理肺孤,也就是必須添加try…catch…捕獲異常罗晕、或者throw 拋出異常。而對(duì)于UncheckedException赠堵,可以選擇處理小渊,也可以不處理。推薦不處理這些異常顾腊。
異常處理
- try 塊:用于捕獲異常粤铭。其后可接零個(gè)或多個(gè)catch塊,若沒(méi)有catch塊杂靶,則必須跟一個(gè)finally塊梆惯。
- catch 塊:用于處理try捕獲到的異常。
- finally 塊:無(wú)論是否捕獲或處理異常吗垮,finally塊里的語(yǔ)句都會(huì)被執(zhí)行垛吗。當(dāng)在try塊或catch塊中遇到return語(yǔ)句時(shí),finally語(yǔ)句塊將在方法返回之前被執(zhí)行烁登。其實(shí) finally 語(yǔ)句塊是在 try 或者 catch 中的 return 語(yǔ)句之前執(zhí)行的怯屉。更加一般的說(shuō)法是,finally 語(yǔ)句塊應(yīng)該是在控制轉(zhuǎn)移語(yǔ)句之前執(zhí)行饵沧,控制轉(zhuǎn)移語(yǔ)句除了 return 外锨络,還有 break 和 continue。
在以下特殊情況下狼牺,finally塊不會(huì)被執(zhí)行:
1)在finally語(yǔ)句塊中 發(fā)生了異常羡儿。
2)try或者catch中System.exit(0)退出程序。
3)程序所在的線程死亡是钥。
4)計(jì)算機(jī)斷電掠归、失火缅叠、或遭遇病毒攻擊
- 代碼示例:
//該代碼直接借用的@Dandan Meng 的,他寫(xiě)的很棒虏冻,我就沒(méi)有再去創(chuàng)建
public class ExceptionTest
{
public static void main(String[] args)
{
int c = 0;
try
{
int a = 3;
int b = 0;
// 這塊代碼出現(xiàn)了異常 肤粱,除數(shù)不能為0
c = a / b;
// 那么異常之后的代碼都不會(huì)被執(zhí)行
System.out.println("Hello World");
}
catch (ArithmeticException e)
{
e.printStackTrace();
}
finally
{
//不管有沒(méi)有發(fā)生異常,finally語(yǔ)句塊都會(huì)被執(zhí)行
System.out.println("Welcome");
}
System.out.println(c);
// 當(dāng)b為0時(shí)厨相,有異常领曼,輸出為c的初始值0
}
}
小結(jié)
關(guān)于異常,知識(shí)點(diǎn)不是很多领铐,網(wǎng)絡(luò)上資料很全面悯森,我寫(xiě)的這些大部分摘抄自網(wǎng)絡(luò),下面附上比較不錯(cuò)的參考博客
參考鏈接:
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/