Javaの実行時エラーとは?よくある原因・例外の種類・対処法まとめ!

Java

はじめに

Javaでプログラムを書いていて、コンパイルまではうまくいったのに、いざ実行してみたら…

Exception in thread "main" java.lang.NullPointerException

というようなエラーメッセージが出て、プログラムが止まってしまったことはありませんか?

これは「実行時エラー」と呼ばれるもので、プログラムの実行中に発生する予期しない問題です。今回は、そんな実行時エラーの種類と対処法を初心者向けにわかりやすく解説します!


1. 実行時エラーとは?

**実行時エラー(Runtime Error)**とは、Javaプログラムが正常にコンパイルされてから実行中に発生するエラーのことです。

コンパイル時には見つからないエラーが、実際にプログラムが動いたときにだけ発生するため、初心者にとって特に対処が難しいと感じる部分です。


2. Javaでよく起きる実行時エラーの種類

実行時エラーの多くは、RuntimeException というクラスを継承した非チェック例外として発生します。

✅ NullPointerException

最もよく見る実行時エラー。null の変数にアクセスしたときに発生します。

String name = null;
System.out.println(name.length()); // NullPointerException

✅ ArrayIndexOutOfBoundsException

配列の範囲外にアクセスしたときに発生。

int[] nums = {1, 2, 3};
System.out.println(nums[3]); // IndexOutOfBounds

✅ ArithmeticException

数学的に無効な演算、特に0で割ったときに発生します。

int result = 10 / 0; // ArithmeticException

✅ ClassCastException

オブジェクトの型を間違って変換しようとしたときに発生。

Object obj = "Java";
Integer num = (Integer) obj; // ClassCastException

✅ NumberFormatException

文字列から数字への変換で不正なフォーマットだったときに発生。

int number = Integer.parseInt("abc"); // NumberFormatException

✅ ConcurrentModificationException

リストなどのコレクションをループ中に変更しようとしたときに発生。

List<String> list = new ArrayList<>();
list.add("Java");
for (String s : list) {
list.remove(s); // ConcurrentModificationException
}

3. JVMエラー(Error)とは?

RuntimeExceptionの他に、Errorという深刻な実行時エラーもあります。

❗ OutOfMemoryError

メモリ不足のときに発生します。

❗ StackOverflowError

再帰呼び出しが深くなりすぎたときに発生。

public void loop() {
loop(); // 無限再帰 → StackOverflowError
}

4. スタックトレースの読み方

実行時エラーが起きると、Javaは「スタックトレース」という情報を表示します。

Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:5)
  • Main.java:5 → 5行目でエラーが発生した
  • メソッド名やファイル名、行番号から原因を追跡できます!

5. 対処法:try-catchで安全に

例:0で割るエラーの対処

try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("0では割れません!");
}

ただし、全てをtry-catchに頼るのはNG!
根本的な原因は、プログラム設計や入力チェックの不足です。


6. 予防のためにやるべきこと

✅ nullチェックをする

if (name != null) {
System.out.println(name.length());
}

✅ 配列やリストの範囲を確認する

if (index >= 0 && index < array.length) {
System.out.println(array[index]);
}

✅ 型を確認する(instanceof)

if (obj instanceof Integer) {
Integer num = (Integer) obj;
}

✅ コレクションはIteratorで安全に削除

Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
it.remove();
}

7. よくある実行時エラーとそのコード例

エラー発生例対処法
NullPointerExceptionname.length()nullチェック
ArrayIndexOutOfBoundsExceptionarr[5]配列サイズを確認
ArithmeticException10 / 0割る数をチェック
ClassCastException(Integer) objinstanceofで確認
NumberFormatExceptionInteger.parseInt("abc")try-catchまたはisNumeric
ConcurrentModificationExceptionループ中のremoveIteratorを使う

8. 学習の進め方

Javaを学ぶ上で、実行時エラーの理解はとても大切です。

まずは、「絶対にJavaプログラマーになりたい人へ。」を読んで、エラーの種類や対処法の感覚を身につけましょう。

もし、実践的なコードのレビューや個別の指導を受けたい場合は、「サイゼントアカデミー」を活用するのがおすすめです!


まとめ

  • 実行時エラーはプログラム中のミスや設計漏れで起こる
  • NullPointerExceptionやIndexOutOfBoundsが代表格
  • try-catchだけでなく、事前チェックで予防が重要
  • エラーメッセージとスタックトレースを読めるようになろう!

コメント

タイトルとURLをコピーしました