例外処理を理解する
例外処理とは
例外処理はたいていのオブジェクト指向言語で実装されている機構で、簡単にいえばエラー処理です。JavaではTry Catch構文で実装します。考え方としては、
- try節に通常の処理を書く
- エラーが発生したらtry節から抜けて、該当する例外クラスに対応したcatch節に処理を渡す(投げる)
- finally節では、例外の有無に関わらず実行される処理を書く
ということです。
try{
通常の処理のコード;
} catch (例外クラス 変数名){
例外が発生した時に実行される;
}finally{
例外の有無に関わらず実行される処理;
}
注意して欲しいのは、どんなメソッドでもというわけではなく、例外を投げるメソッド(例外処理が実装されたメソッド)を使うときのみです。ここで問題になってくるのは、
- どんなメソッドに例外処理が実装されているのか?
- そのメソッドはどんな例外クラスを投げるのか?
を理解しないといけません。。。が、IDE(Eclipse)がそれを助けてくれます。
例外処理の対応と書き方
下記のコードは文法上問題ないように見えますが、実はコンパイルエラーになります。理由は
- FileReaderクラスが例外を投げるクラスなのにTry Catch節がない
からです。
public static void main(String[] args) {
String fileName = "hogehoge.txt";
File file = new File(fileName);
FileReader filereader = new FileReader(file);
}
Eclipseでは下記のように赤いアンダーラインが出ますが、左端にエラーナビが出ています。
ここをクリックすると、下記のように補助メッセージが出てきます。
選択肢は次の2つです。
【Add Throws declaration】
実装しているメソッドに Throwsを追加します。意味としては、ここで例外処理はせずに、エラー処理は呼び出し側に任せるということです。意味がわからなければ、これは選ばないで下さい。
【Surround with try/catch】
try catch節を自動生成します。下記のようになります。この場合は、FileNotFoundExceptionという例外クラスが投げられるんですね。
public static void main(String[] args) {
String fileName = "hogehoge.txt";
File file = new File(fileName);
try {
FileReader filereader = new FileReader(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
本来は、こういったことを事前知識として知っておかないといけませんが、Eclipseがそれを助けてくれます。便利ですね。