例外処理
プログラムで処理をしている最中に何らかの処理によりエラーが発生する場合があります。通常、そのようなエラーが発生するとアプリケーションは停止してしまいます。しかし、エラーが発生したときは、特別な処理をして引き続きアプリケーションを動作させたいという場面が出てきます。ここでは、エラーが発生したときの対処方法を見てみましょう。
オブジェクト指向言語ではエラーのことを「例外」と呼んでいます。エラーが発生する、つまり、例外が発生することを、「例外がスローされる」といいます。発生した例外の種類に応じ例外に対応するオブジェクトが生成され、スローされます。スローされた例外を取得(キャッチ)して、エラーメッセージを表示させるなどの処理を行います。
インターフェース定義の書式 |
---|
try{ 通常の処理 }catch(例外クラス名 変数名){ 例外処理 }finally{ 共通処理 } |
○ ファイル
次のようにファイルを作成してください。
ファイル名 | TryCatchTest.java |
---|
○ プログラム
mainメソッドに次のようにプログラムを入力してください。
TryCatchTest.java
- import java.io.*;
- public class TryCatchTest{
- public static void main(String[] args){
- try{
- //キーボード入力の準備
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- //数値を入力
- System.out.print("数値を入力:");
- int num1 = Integer.parseInt(br.readLine());
- System.out.println("数値「" + num1 + "」が入力されました。");
- }catch(NumberFormatException e){
- System.out.println("数字を入力してください。");
- System.out.println(e.getMessage());
- }catch(Exception e){
- System.out.println(e.getMessage());
- }
- }
- }
○ コンパイルと実行
C:¥work>javac TryCatchTest.java
C:¥work>java TryCatchTest
数値を入力:4
数値「4」が入力されました。
C:¥work>java TryCatchTest
数値を入力:a
数字を入力してください。
For input string: "a"
C:¥work>
○ 解説
5~14行目は、tryブロックです。この中に通常の処理を書きます。このブロック内で例外がスローされると、14行目、また17行目から定義されているcatchブロックに飛びます。
11行目では、キーボードから入力したデータをint型に変換しています。Integerクラスはint型にあたるクラスです。このクラスのparseIntメソッドは引数に数字を渡すとint型の数値に変換して返します。引数に数値に変換できないデータを渡した場合、NumberFormatExceptionがスローされるように作られています。詳しくは、Java SE API & ドキュメントを参照してください。Javaに用意されているメソッドがどのような時にどのような例外が発生するかが説明されています
14~17行目と、17~19行目はcatchブロックです。catchの引数にキャッチする例外の型を持った変数を宣言します。このブロックは複数記述することができます。Exception型を指定すると、すべての例外をキャッチすることができます(Exceptionはすべての例外クラスのスーパークラス)。このブロック内でエラーメッセージなどの処理を記述します。
finally文は通常の処理が終了した後にも、例外処理に移って処理が終わった後にも処理をさせたい内容を記述します。finally文は省略できます。