広告 Java入門

【Java入門】例外(try-catch)

はじめに

前回の記事では、Javaの列挙型について紹介しました。

本記事では、Javaの例外について紹介します。

例外とは

例外とは、プログラムを実行したときに起こるエラーのことです。

プログラムを作る時、正常系(想定している正しい動作)の動作を作るのは当たり前のことです。ただ、正常系の動作しか考慮していないと、想定外の使われ方をしたときやプログラムにバグ(プログラムに潜む誤り)があるとき、通信異常が発生したときなどに問題が発生します。

そのため、プログラムを作るときは異常系(想定していない操作)の動作を考慮して作成することが大切です。

スポンサーリンク

例外が発生した場合の処理を記述することで、異常終了を防ぐことができます。

この処理でエラーが発生したらどうなる?どう動くべき?という疑問を常に持ちながら設計・製造することが大切です。

例外処理の流れ

例外が起こりそうな処理には、try文、catch文、finally文を使います。

Java例外の例

try{}内に例外が起こりそうな処理を記述します。

そして、catch{}内には、例外が発生した時に行う処理を記述します。try{}内で例外が発生した場合、catch{}内の処理が動き出します。catchでは、例外クラスのオブジェクトを受け取ります。例外クラスのオブジェクトには、どんな例外がどこで発生したのかの情報が格納されています。

最後に、finally{}内の処理は例外発生の有無に関わらず行う処理を記述します。finally文は省略可能なので、必要がなければ書かなくて大丈夫です。

正常時と例外発生時の処理の流れは次のとおりです。

正常時の流れ

  • try内の処理を実行
  • finally内の処理を実行(finallyは省略可能なのでfinallyが存在する場合のみ実行)

例外発生時の流れ

  • try内の処理を実行
  • 例外発生(例外が発生した時点でtry内の処理は中断しcatch文へ)
  • catch内の処理を実行
  • finally内の処理を実行(finallyは省略可能なのでfinallyが存在する場合のみ実行)

スポンサーリンク

try-catchの実装例

それでは、実際にソースコードで try-catch の使用例を紹介します。

まず、例外が発生しないときの動きを確認します。

[例外発生なしの例]

public class TryOKSample {

    public static void main(String[] args) {
        try {
            int[] num = new int[1];
            num[0] = 1;
            
            System.out.println("正常終了しました");
            
        } catch (Exception e) {
            System.out.println("エラーが発生しました");
            e.printStackTrace();
        
        } finally {
            System.out.println("処理を終了します");
        }
    }
}

[実行結果]

正常終了しました
処理を終了します

実行した結果、try{}内の処理と、finally{}内の処理が実行され、catch{}内の処理は実行されませんでした。

 

次に例外が発生するときの動きを確認します。配列の範囲外を指定して例外を発生させています。

public class TryNGSample {

    public static void main(String[] args) {
        try {
            int[] num = new int[1];
            
            // 配列の範囲外を指定、ここで例外が発生
            num[1] = 1;
            
            System.out.println("正常終了しました");
            
        } catch (Exception e) {
            System.out.println("エラーが発生しました");
            e.printStackTrace();
        
        } finally {
            System.out.println("処理を終了します");
        }
    }
}

[実行結果]

エラーが発生しました
java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
  at course22.TryNGSample.main(TryNGSample.java:10)
処理を終了します

実行した結果、try{}内の処理「num[1] = 1;」で例外が発生したため、try{}内の処理は途中で中断し、catch{}内の処理とfinally{}内の処理が実行されています。

また、catch{}内の処理「e.printStackTrace();」でエラー内容とエラーが発生した場所の情報を出力しています。

エラー内容をログファイル等に出力することで、問題解決に役立ちます。

終わりに

本記事では、Javaの例外について紹介しました。

次回の記事では、Java APIについて紹介します。

helpful