異常分類
在Java中異常被當做對象來處理,根類是java.lang.Throwable類,在Java中定義了很多異常類(如OutOfMemoryError、NullPointerException、IndexOutOfBoundsException等),這些異常類分為兩大類:Error和Exception。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iMkVDZxUTZ5EGNmVmZ4ETYwMTN0MjNmZGOhRjMwkDZx8CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
Error
Error是無法處理的異常,比如OutOfMemoryError,一般發生這種異常,JVM會選擇終止程式。是以我們編寫程式時不需要關心這類異常。
Exception
Exception,也就是我們經常見到的一些異常情況,比如NullPointerException、IndexOutOfBoundsException,這些異常是我們可以處理的異常。
unchecked exception(運作時異常)
運作時異常(RuntimeException),比如常見的NullPointerException、IndexOutOfBoundsException。對于運作時異常,java編譯器不要求必須進行異常捕獲處理或者抛出聲明,由程式員自行決定。
checked exception(檢查性異常)
非運作時異常(運作時異常以外的異常就是非運作時異常),java編譯器強制程式員必須進行捕獲處理,比如常見的IOExeption和SQLException。對于非運作時異常如果不進行捕獲或者抛出聲明處理,編譯都不會通過。
異常捕獲
Java提供了try(嘗試)、catch(捕捉)、finally(最終)這三個關鍵字來處理異常。在處理各種異常時,需要用到對應的異常類,指的是由程式抛出的對象所屬的類。
try{
// 程式代碼
}catch(異常類型1 異常的變量名1){
// 程式代碼
}catch(異常類型2 異常的變量名2){
// 程式代碼
}finally{
// 程式代碼
}
注意事項:
- catch 不能獨立于 try 存在。
- 在 try/catch 後面添加 finally 塊并非強制性要求的。
- try 代碼後不能既沒 catch 塊也沒 finally 塊。
- try, catch, finally 塊之間不能添加任何代碼。
相關面試題
下面程式的結果是()
public class Demo {
public static String sRet = "";
public static void func(int i)
{
try
{
if (i%2==0)
{
throw new Exception();
}
}
catch (Exception e)
{
sRet += "0";
return;
}
finally
{
sRet += "1";
}
sRet += "2";
}
public static void main(String[] args)
{
func(1);
func(2);
System.out.println(sRet);
}
}
A. 120
B. 1201
C. 12012
D. 101
正确答案: B