Java 9のJShellで例外はどう扱われる?自動キャッチの仕組みと具体例
JShellとは
Java 9で導入されたJShellは、Java言語の機能や豊富なライブラリを素早く探索・発見・実験できる、高速で使いやすい対話型環境(REPL)です。コードを1行ずつ入力して即座に結果を確認できるため、学習やプロトタイピングに最適なツールといえます。
JShellにおける例外処理の仕組み
通常のJavaプログラムでは、try-catchブロックなどを使って例外を明示的に捕捉する必要があります。しかし、JShellでは例外を手動でキャッチする必要がありません。
JShellは発生した各例外を自動的にキャッチし、例外の種類やメッセージなどの情報を表示した後、次のJShellプロンプトを表示してくれます。そのため、セッションを中断することなく作業を続行できます。
この仕組みは非チェック例外(unchecked exception)にも有効です。さらに、チェック例外(checked exception)と非チェック例外の両方を自動的に捕捉してくれるため、チェック例外をスローするメソッドでも、煩わしいtry-catchの記述なしに気軽に試すことができます。
例1:ArrayIndexOutOfBoundsException(配列の範囲外アクセス)
以下の例では、要素数が3の配列に対して存在しないインデックス「values[4]」へアクセスしたため、ArrayIndexOutOfBoundsExceptionが発生しています。
jshell> int[] values = {10, 20, 30}
values ==> int[3] { 10, 20, 30 }
jshell> values[4]
| java.lang.ArrayIndexOutOfBoundsException thrown: 4
| at (#7:1)例2:FileNotFoundException(ファイルが見つからない)
以下の例では、指定されたディレクトリ内に「data.txt」というファイルが存在しないため、FileNotFoundException(チェック例外)が発生しています。通常のJavaプログラムであれば、この例外はコンパイル時にcatch句またはthrows宣言が必須ですが、JShellではそのまま実行できる点が特徴です。
jshell> FileInputStream fis = new FileInputStream("data.txt")
| java.io.FileNotFoundException thrown: data.txt (The system cannot find the file specified)
| at FileInputStream.open0 (Native Method)
| at FileInputStream.open (FileInputStream.java:196)
| at FileInputStream.<init> (FileInputStream.java:139)
| at FileInputStream.<init> (FileInputStream.java:94)
| at (#5:1)例3:ArithmeticException(ゼロ除算)
以下の例では、「1/0」の計算結果が未定義となるため、非チェック例外であるArithmeticExceptionが発生しています。
jshell> 1/0
| java.lang.ArithmeticException thrown: / by zero
| at (#4:1)まとめ
JShellは例外を自動的に捕捉してくれるため、エラーが発生してもセッションが終了せず、すぐに次のコードを試すことができます。この特性により、例外をスローするメソッドの挙動を安全かつ手軽に検証できることが、JShellならではの大きなメリットです。
-
Javaのランタイム例外(RuntimeException)とは?主な種類と対処法を解説
ランタイム例外(RuntimeException)とは ランタイム例外(RuntimeException)は、Javaプログラミング言語における各種例外の親クラスであり、発生するとプログラムやアプリケーションがクラッシュ、あるいは異常終了する可能性のある例外群を指します。 チェック例外(検査例外)と異なり、ランタイム例外はコンパイル時のチェック対象外です。そのため、try-catchでの捕捉やthrows宣言が必須ではなく、実行時に初めて表面化することが少なくありません。 ランタイム例外は通常、プログラムが本来対処すべき外部要因ではなく、プログラマーのコーディングミスを示している点が大きな特徴
-
Javaの例外(Exception)とは?基本概念から例外処理の方法まで徹底解説
Java開発者にとって、Javaの例外と例外処理に関する知識は必須です。 本チュートリアルでは、Javaプログラミングにおいてすべてのエンジニアが押さえておくべき基礎知識を解説します。まずは「Javaの例外とは何か」というところから始めましょう。 Javaの例外とは Javaプログラムは、実行中に何らかの問題に遭遇し、突如として強制終了することがあります。このような問題を例外(Exception)と呼びます。 優れたプログラマーは、実行時に発生し得るエラーを予測し、例外が起きた場合でもプログラムが別の経路で動作を継続できるように設計します。このような実践が例外処理(Exception Hand