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
チャレンジ
簡単processNumber という名前のメソッドを作成し、2つの引数を受け取る:
- 整数に変換するための String (
number) - 例外をスローするかどうかを決定する boolean (
shouldThrow)
メソッドは以下を行うべきです:
- result 変数を 0 に初期化
- try ブロック内で:
- shouldThrow が true の場合、10 を 0 で割る
- それ以外の場合、number 文字列を整数に変換し、result に格納
- catch ブロックで:result を -1 に設定
- finally ブロックで:result に 100 を加算
- result を文字列として返す
チートシート
finally ブロックは、try-catch ブロックの後に実行され、例外が発生したかどうかに関係なく実行されます。クリーンアップ操作に使用されます。
基本構造:
try {
// Code that might throw an exception
} catch (ExceptionType e) {
// Code to handle the exception
} finally {
// Code that always executes
}カウンター付きの例:
int counter = 0;
try {
int result = 10 / 0; // throws exception
counter = 1;
} catch (ArithmeticException e) {
counter = 2;
} finally {
counter = 3; // always executes
}
// counter = 3自分で試してみよう
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));
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。