Menu
CoddyTech

finally ブロック

CoddyのJavaジャーニー「ロジックとフロー」セクションの一部。レッスン 41/59。

finally ブロックには、例外が発生したかどうかにかかわらず、try-catch ブロックの後に実行されるコードが含まれます。これは、ファイルやデータベース接続を閉じるなどのクリーンアップ処理によく使用されます。

try-catch-finallyブロックの基本構造は次のとおりです。

try {
   // 例外をスローする可能性のあるコード
} catch (ExceptionType e) {
   // 例外を処理するコード
} finally {
   // 常に実行されるコード
}

カウンターを使った例を見てみましょう:

int counter = 0;
try {
   int result = 10 / 0;
   // これは例外をスローします
   counter = 1;
} catch (ArithmeticException e) {
   counter = 2;
} finally {
   counter = 3;
   // これは常に実行されます
}

上記のコードを実行すると、counter には次の値が含まれます:

3

catch の括弧内の型によって、そのブロックが処理するエラーが決まります。よくあるものとして、整数を 0 で割ると発生する ArithmeticException と、テキストが数値でないときに Integer.parseInt() によって発生する NumberFormatException があります。1つの catch で複数の型を同時に処理できます:

try {
   int value = Integer.parseInt(text);
   int result = 10 / value;
} catch (ArithmeticException | NumberFormatException e) {
   // 両方を処理する
} finally {
   // 常に実行される
}

代わりに Exception を捕捉すると、より広範囲になります。これら2つと、その他の例外も処理します。

challenge icon

チャレンジ

簡単

processNumberという名前のメソッドを作成し、2つの引数を受け取るようにします。

  1. 整数に変換するString(number)
  2. 例外をスローするかどうかを決定するboolean(shouldThrow)

メソッドは次のように動作します。

  1. result変数を0で初期化する
  2. tryブロック内で
    • shouldThrowがtrueの場合、10を0で割る
    • それ以外の場合、number文字列を整数に変換してresultに格納する
  3. catchブロック内で、resultを-1に設定する
  4. finallyブロック内で、resultに100を加える
  5. resultを文字列として返す

自分で試してみよう

import java.util.Scanner;

public class Main {
    public static String processNumber(String number, boolean shouldThrow) {
        // ここにコードを書いてください
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String number = scanner.nextLine();
        boolean shouldThrow = Boolean.parseBoolean(scanner.nextLine());
        
        System.out.println(processNumber(number, shouldThrow));
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Javaオンラインコンパイラ