可檢測異常(Check Exception)與非檢測異常(Uncheckecd Exception)

 

1.非檢測異常不需要強制處理或聲明,為 Error RuntimeException 2個類別。e.g.

public void throwUncheckedException(String target)
{
        if(target == null)
        {
            throw new NullPointerException();
        }
}

throwUncheckedException 方法為很常見的檢查方法參數有效性的動作,在方法中(第5行)會拋出NullPointerException。
 
因為 NullPointerException 為 Unchecked Exception,所以不需要在方法宣告位置(第1行)加上聲明的處理 e.g.

public void throwUncheckedException(String target) throws NullPointerException
{
        if(target == null)
        {
            throw new NullPointerException();
        }
}

Unchecked Exception 不需要強制呼叫端處理,可以直接呼叫沒問題。e.g.

@Test
public void testThrowUncheckedException()
{
        throwUncheckedException(null);
}

 
 


 

2.可檢測異常必須強制處理或聲明,主要為 Exception 及其子類別(除了RuntimeException以外)e.g.

public void throwCheckedException(String target) throws IOException
{
        if(target == null)
        {
            throw new IOException();
        }
}

throwCheckedException 在方法中(第5行)會拋出IOException,因為 IOException 屬於 Checked Exception,必須強制處理。
所以可以選擇在方法宣告聲明 IOException,讓呼叫端去處理或是在原始位置處理 e.g.

public void throwCheckedException(String target)
{
        if(target == null)
        {
            try {
                throw new IOException();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
}

 
如果選擇在方法宣告聲明IOException , 那呼叫端就必須去處理 IOException e.g.

@Test
public void testThrowCheckedException()
{
        try {
            throwCheckedException(null);
        } catch (IOException e) {
            e.printStackTrace();
        }
}