Javaのtry・catch・throw・throwsとは?例外処理の基本をわかりやすく解説
Javaにおけるtryとcatch
Javaでは、tryキーワードとcatchキーワードを組み合わせることで、メソッド内で例外を捕捉(キャッチ)することができます。try/catchブロックは、例外が発生する可能性のあるコードを囲むように配置します。
tryとcatchの基本構文は以下の通りです。
try {
// 例外が発生する可能性のあるコード(保護されたコード)
} catch (ExceptionName e1) {
// 例外を処理するcatchブロック
}catch文では、捕捉したい例外の型を宣言します。保護されたコード内で例外が発生すると、tryブロックに続くcatchブロック(複数存在する場合もあります)が順にチェックされます。発生した例外の型がいずれかのcatchブロックで宣言されていれば、その例外はメソッドの引数として渡されるのと同じ要領で、該当するcatchブロックに引き渡されます。
try/catchのサンプルコード
実際にtryとcatchを実装した例を見てみましょう。ここでは、配列の範囲外の要素にアクセスしたことで発生するArrayIndexOutOfBoundsExceptionを捕捉しています。
import java.io.*;
public class Demo {
public static void main(String args[]) {
try {
int a[] = new int[5];
System.out.println("8番目の要素にアクセス :" + a[7]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("スローされた例外 :" + e);
}
System.out.println("ブロックの外");
}
}実行結果
スローされた例外 :java.lang.ArrayIndexOutOfBoundsException: 7 ブロックの外
このように、例外が発生してもプログラムは強制終了せず、catchブロックで適切に処理された後、その後のコードが引き続き実行されます。
Javaにおけるthrowとthrows
メソッドがチェック例外(検査例外)を自身で処理しない場合は、そのメソッドが例外をスローすることをthrowsキーワードで宣言しなければなりません。throwsキーワードは、メソッドシグネチャの末尾に記述します。
一方、throwキーワードを使うと、新しくインスタンス化した例外でも、直前に捕捉した例外でも、任意の例外を明示的にスローできます。
つまり、throwsはチェック例外の処理を呼び出し元に委ねる(後回しにする)ために使われ、throwは例外を意図的に発生させるために使われます。
throwの使用例
public class ThrowDemo {
static void checkAge(int age) {
if (age < 18) {
// 新しい例外を明示的にスローする
throw new ArithmeticException("18歳未満はアクセスできません");
} else {
System.out.println("アクセスが許可されました");
}
}
public static void main(String args[]) {
checkAge(15);
}
}throwsの使用例
import java.io.*;
public class ThrowsDemo {
// チェック例外の処理を呼び出し元に委ねる
void readFile() throws IOException {
FileReader file = new FileReader("sample.txt");
file.read();
file.close();
}
}まとめ
- try/catch: 例外が発生する可能性のあるコードを囲み、発生した例外を受け取って処理するための仕組み。
- throw: 例外オブジェクトを明示的にスローするためのキーワード。
- throws: メソッドがチェック例外を処理せず、呼び出し元に処理を委ねることを宣言するためのキーワード。
これらを正しく使い分けることで、予期しないエラーが発生してもプログラムが異常終了するのを防ぎ、堅牢で信頼性の高いアプリケーションを構築できます。
-
【Python】tryブロック内のexcept節から例外を再送出し、外側のexceptブロックで捕捉する方法
はじめに:1つのtryブロックで実行されるexcept句は「1つだけ」Pythonでは、1つのtryブロックに対して実際に実行されるexcept句は常に1つだけです。最初のexcept句がマッチして処理を実行すると、そのtry文自体の処理は完了し、同じtryブロック内の他のexcept句が再度評価されることはありません。そのため、「except句の中でraiseした例外を、同じ階層の別のexcept句で捕捉する」ことはできません。例外をより上位の階層(外側)で捕捉したい場合は、ネストされた(入れ子構造の)tryブロックを使う必要があります。ネストしたtry...exceptブロックのサンプルコ
-
Javaの例外(Exception)とは?基本概念から例外処理の方法まで徹底解説
Java開発者にとって、Javaの例外と例外処理に関する知識は必須です。 本チュートリアルでは、Javaプログラミングにおいてすべてのエンジニアが押さえておくべき基礎知識を解説します。まずは「Javaの例外とは何か」というところから始めましょう。 Javaの例外とは Javaプログラムは、実行中に何らかの問題に遭遇し、突如として強制終了することがあります。このような問題を例外(Exception)と呼びます。 優れたプログラマーは、実行時に発生し得るエラーを予測し、例外が起きた場合でもプログラムが別の経路で動作を継続できるように設計します。このような実践が例外処理(Exception Hand