1. 程式人生 > >Java之Exception 分類

Java之Exception 分類

可查異常: CheckedException
可查異常即必須進行處理的異常,要麼try catch住,要麼往外拋,誰呼叫,誰處理,比如 FileNotFoundException
如果不處理,編譯器,就不讓你通過

 

執行時異常RuntimeException指: 不是必須進行try catch的異常 
常見執行時異常: 
除數不能為0異常:ArithmeticException 
下標越界異常:ArrayIndexOutOfBoundsException 
空指標異常:NullPointerException 
在編寫程式碼的時候,依然可以使用try catch throws進行處理,與可查異常不同之處在於,即便不進行try catch,也不會有編譯錯誤 
Java之所以會設計執行時異常的原因之一,是因為下標越界,空指標這些執行時異常太過於普遍,如果都需要進行捕捉,程式碼的可讀性就會變得很糟糕。

 

 

錯誤Error,指的是系統級別的異常,通常是記憶體用光了
在預設設定下,一般java程式啟動的時候,最大可以使用16m的記憶體
如例不停的給StringBuffer追加字元,很快就把記憶體使用光了。丟擲OutOfMemoryError
與執行時異常一樣,錯誤也是不要求強制捕捉的

程式碼比較複製程式碼

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

package exception;

  

public class TestException {

  

    public static void main(String[] args) {

     

        StringBuffer sb =new StringBuffer();

         

        

for (int i = 0; i < Integer.MAX_VALUE; i++) {

            sb.append('a');

        }

         

    }

 

}

 

 

 

Throwable是類,Exception和Error都繼承了該類
所以在捕捉的時候,也可以使用Throwable進行捕捉
如圖: 異常分Error和Exception
Exception裡又分執行時異常和可查異常。

Throwable

程式碼比較複製程式碼

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

package exception;

 

import java.io.File;

import java.io.FileInputStream;

 

public class TestException {

 

    public static void main(String[] args) {

 

        File f = new File("d:/LOL.exe");

 

        try {

            new FileInputStream(f);

            //使用Throwable進行異常捕捉

        catch (Throwable t) {

            // TODO Auto-generated catch block

            t.printStackTrace();

        }

 

    }

}

 步驟 2 : 

練習-Throwable 

在方法宣告上,可以丟擲指定的異常,比如FileNotFoundException
那麼能否丟擲Throwable這個類? 

這個方法的呼叫者又該如何處理?

 

 

可以丟擲Throwable,並且在呼叫的時候必須進行catch處理。

但是這樣的設計方法做不好,因為不知道丟擲的型別到底是哪種具體問題,無法針對性的處理。

程式碼比較複製程式碼

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

package exception;

 

import java.io.File;

import java.io.FileInputStream;

 

public class TestException {

 

    public static void method() throws Throwable {

        File f = new File("d:/LOL.exe");

        new FileInputStream(f);

    }

 

    public static void main(String[] args) {

        try {

            method();

        catch (Throwable e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}