throws宣言をいつどこで行うのかわからない。ということで調べてみました。
throws宣言とは
メソッド内で例外が発生する場合に、そのメソッド内でキャッチしない場合throws宣言で再スローしtry-catchの場所を自由に決めることができます。
構文
void test() throws Exception{ // any code}
「throws 例外」のように書きます。
throws宣言サンプルコード
例外が発生する場合にthrows宣言を書く場合があることはなんとなくわかりましたが、より詳しく理解するためにサンプルコードを見ていきましょう。
throws宣言を使って任意の場所でtry-catch
throws宣言書くことにより、呼び出し元のメソッドでtry-catchを行っています。
import java.io.IOException;
public class Main {
public static void main(String[] args) {
Test tst = new Test();
try{
tst.throwsTest();
}catch(Exception e){
System.out.println(e);
}
}
}
class Test{
public void throwsTest() throws IOException{
throw new IOException(); // IOExceptionを発生させる
}
}
このようにthrows宣言を記述することで、処理する場所を変えることができます。言い換えれば、Testクラスでthrows宣言せずに、try-catchで例外を処理すればthrows宣言する必要はありません。
import java.io.IOException;
public class Main {
public static void main(String[] args) {
Test tst = new Test();
tst.throwsTest();
}
class Test{
public void throwsTest(){
try{
throw new IOException();
}catch(Exception e){ // 検査例外の処理を行う
System.out.println(e);
}
}
}
throwとの違い
throwとthrowsで名前が似ていますが、throwは例外を意図的に発生させるために使用します。
自作のエラーを作成する際に使ったりします。
おわり
throwsを何か特別なものと勘違いして理解するのに時間がかかってしまいましたが、例外を処理する場所をメソッドの呼び出し元にしたい時に使用するものでした。
これにより例外をひとまとめに処理したりすることが可能になって便利なんだとか。