JavaのArrayStoreException(非チェック例外)とは?発生原因とtry-catchでの対処法を解説
java.lang.ArrayStoreExceptionは非チェック例外(unchecked exception)の一種です。ある型のオブジェクトを、別の型のオブジェクトを格納するために作られた配列に保存しようとした際に発生します。
よく見られる例が「java.lang.ArrayStoreException: java.lang.Integer」というエラーです。これは、String型の配列やFloat型の配列など、異なる型の配列に対してInteger(整数)を格納しようとしたときにスローされます。
発生例1:ArrayStoreExceptionが起こるコード
public class ArrayStoreExceptionTest {
public static void main(String[] args) {
Object[] names = new Float[2];
names[1] = new Integer(2);
}
}
実行結果
Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
at ArrayStoreExceptionTest.main(ArrayStoreExceptionTest.java:4)
上記のプログラムでは、「java.lang.ArrayStoreException: java.lang.Integer」が発生しています。このエラーメッセージは次のように読み解けます。
- java.lang.ArrayStoreException: Float型の配列にInteger型のオブジェクトを格納しようとしたため、Java言語によってスローされた例外です。
- java.lang.Integer: 異なる型の配列に格納しようとして失敗したオブジェクトの型を示しています。
ArrayStoreExceptionへの対処方法
ArrayStoreExceptionはtry文とcatch文を使って捕捉(ハンドリング)できます。対処の手順は以下のとおりです。
- ArrayStoreExceptionをスローする可能性のある処理を、tryブロックとcatchブロックで囲みます。
- catchブロックでArrayStoreExceptionを捕捉します。
- 例外を適切に処理することでプログラムの実行が中断されないため、必要な後続処理や代替処理を実行できます。
対処例2:try-catchで例外をハンドリングするコード
public class ArrayStoreExceptionTest {
public static void main(String[] args) {
Object[] names = new Float[2];
try {
names[1] = new Integer(2);
} catch (ArrayStoreException e) {
e.printStackTrace();
System.out.println("ArrayStoreException is handled");
}
System.out.println("Continuing with the statements after try and catch blocks");
}
}
実行結果
ArrayStoreException is handled
Continuing with the statements after try and catch blocks
java.lang.ArrayStoreException: java.lang.Integer
at ArrayStoreExceptionTest.main(ArrayStoreExceptionTest.java:5)
この例では、例外が発生すると、その発生地点から直ちにcatchブロックへ制御が移ります。まずcatchブロック内の処理が実行され、その後、try-catchブロックの後に記述されたステートメントが引き続き実行されます。
このようにtry-catchで例外を捕捉すれば、プログラムが異常終了することなく、安全に処理を継続できる点がポイントです。
-
Java 9のJShellでデフォルトエディタを変更する方法
JShellは、Java 9から導入されたREPL(Read-Evaluate-Print Loop)ツールです。コマンドラインからコードを読み込み、入力されたスニペットを評価し、その結果を画面に出力してくれます。 JShellのデフォルトエディタを変更する手順 JShellでは、デフォルトの「JShell Editor Pad」を使ってコードを編集できます。さらに、「/set」コマンドを使用すれば、デフォルトエディタを別のものに変更することも可能です。「/edit」コマンドを実行すると、設定されたエディタが起動されます。エディタを変更するには、次のコマンドを実行します。 /set edito
-
JavaでJFrameを画面の中央に表示する方法
JFrameはFrameクラスのサブクラスであり、フレームに追加されたコンポーネントは「コンテンツ」と呼ばれ、contentPaneによって管理されます。JFrameにコンポーネントを追加する場合は、フレーム本体に直接追加するのではなく、contentPane経由で追加するのが推奨されています。JFrameは境界線・タイトルバー・ボタンを持つWindowのようなウィンドウであり、Java Swingアプリケーションの大部分はこのJFrameをベースに実装されています。 デフォルトの状態では、JFrameは画面の左上に表示されます。これを画面中央に表示したい場合は、Windowクラスが提供するs