Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのtry・catch・finallyブロックの間にステートメントを記述できる?

結論:ブロック間へのステートメント記述は不可

結論から言うと、try、catch、finallyブロックの間には一切ステートメントを記述できません。これらのブロックは一つのまとまった単位として扱われるためです。

まず、各ブロックの役割をおさらいしましょう。

  • tryブロック:例外の発生を監視し、例外オブジェクトを検出するとtryブロックの実行を中断し、その例外オブジェクトとともに制御をcatchブロックへ引き渡します。
  • catchブロック:tryブロックから送られてきた例外クラスのオブジェクトを受け取り(キャッチし)、catchブロック内で定義された対応する例外クラスの参照変数にそのオブジェクトを代入します。
  • finallyブロック:例外の発生有無にかかわらず、必ず実行されるブロックです。

許容される組み合わせ

Javaでは以下のような組み合わせが可能ですが、いずれの場合もブロックとブロックの間にコードやステートメントを挟むことは許されていません。

  • try + catchブロック
  • try + 複数のcatchブロック
  • try + finallyブロック
  • try + catch + finallyブロック

もしブロック間に何らかのステートメントを記述しようとすると、コンパイル時エラー(compile-time error)が発生します。

構文

try
{
    // 例外を監視対象とするステートメント
}
// ここにはステートメントを記述できない
catch(Exception ex){
    // ここで例外を捕捉する
}
// ここにはステートメントを記述できない
finally{
    // finallyブロックは省略可能で、tryまたはtry-catchブロックが存在する場合のみ記述できる。
    // tryブロック内で例外が発生したかどうか、また発生した例外がcatchブロックで
    // 捕捉されたかどうかにかかわらず、常に実行される。
    // finallyブロックが実行されないのは、System.exit()が呼び出された場合と
    // Errorが発生した場合のみである。
}

コード例

public class ExceptionHandlingTest {
    public static void main(String[] args) {
        System.out.println("この位置には任意の数のステートメントを記述できます");
        try {
            int i = 10/0; // このステートメントはArithmeticExceptionをスローする
            System.out.println("このステートメントは実行されません");
        }
        // ここにはステートメントを記述できない
        catch(ArithmeticException ex){
            System.out.println("例外がスローされると直ちにこのブロックが実行されます");
        }
        // ここにはステートメントを記述できない
        finally {
            System.out.println("このブロックは必ず実行されます");
        }
        System.out.println("この位置には任意の数のステートメントを記述できます");
    }
}

実行結果

この位置には任意の数のステートメントを記述できます
例外がスローされると直ちにこのブロックが実行されます
このブロックは必ず実行されます
この位置には任意の数のステートメントを記述できます

このように、try・catch・finallyは例外処理として密接に連携する一連の仕組みであり、ブロックの外側(メソッド内の通常の位置)であれば自由にステートメントを記述できますが、ブロック同士の間に割り込ませることはできません。このルールを守ることで、コンパイルエラーを防ぎ、読みやすく堅牢な例外処理を実装できます。

  1. JavaScriptのtry文とcatch文の使い方をサンプルコードで解説

    try文とcatch文とはtry文を使うと、コードブロックを実行しながらエラーの有無をテストできます。実行中にエラーが発生した場合、そのエラーはcatch文によって捕捉(キャッチ)され、プログラムが強制終了することなく適切に処理を行うことができます。この仕組みは「例外処理」と呼ばれ、予期しないエラーが発生してもユーザーに分かりやすいメッセージを表示したり、代替処理に切り替えたりする際に非常に役立ちます。JavaScriptにおけるtry文とcatch文のサンプルコード以下は、宣言前に変数へアクセスした際に発生するエラーを、try〜catch文で捕捉して画面に表示する例です。コード例<!D

  2. Pythonのtry・except・finally文を解説!例外処理の基本と使い方

    Pythonにおける例外処理では、try文とexcept文を使って、発生した例外(エラー)を捕捉し、適切に処理することができます。try節の中のコードは、上から順に1文ずつ実行されます。もし実行中に例外が発生すると、その時点でtryブロック内の残りの処理はスキップされ、代わりにexcept節が実行されます。基本的な例try: apple + 6except Exception: print(Cannot concatenate str and int objects)出力結果Cannot concatenate str and int objectsこのように、try〜except