すべての例外型は、Throwableクラスまたはそのサブクラスを継承して作成します。Throwable (Java Platform SE 7 )
例外は、throw文によってスローできます。
throw expression;
tryブロック内でスローされた例外は、catch節で捕捉できます。
try { statements } catch (exception_type1 e) { statements } } catch (exception_type2 e) { statements } finally { statements }14.20. The try statement - Chapter 14. Blocks and Statements
catch節は記述された順に処理されます。そのため、ある例外型AのサブクラスBが後に記述されていると、例外型Bのcatch節は機能しなくなります。なお、このような場合には「Unreachable catch block for B_Exception. It is already handled by the catch block for A_Exception」のようにエラーとして通知されます。
Exceptionはすべての例外のスーパークラスです。よって、
catch (Exception e) {}
のようにすると、あらゆる例外型が捕捉されてしまいます。
throws節では、メソッドでスローする例外を宣言します。これはチェックされる例外 (checked exception) と呼ばれ、メソッドはここで宣言した例外しかスローできません。ただしRuntimeExceptionとErrorだけは特別で、これらはthrowsで宣言する必要がありません。
public void Func1() throws Exception {
//
}
throwsが宣言されたメソッドを呼び出す側は、その例外に対処することを強制されます。何も対処をしないと、コンパイラによってエラーとなります。
void Func1() throws Exception{ // } void Func2() { Func1(); // ERROR : Unhandled exception type Exception }
これに対処するには、次のようにtry...catchで例外を捕捉するか、
void Func2() {
try {
Func1();
} catch (Exception e) {
// 例外に対する処理
}
}
呼び出す側のメソッドにもthrowsを宣言し、例外を通過させます。
void Func2() throws Exception { Func1(); }