はじめに
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. よくある実行時エラーとそのコード例
| エラー | 発生例 | 対処法 |
|---|---|---|
| NullPointerException | name.length() | nullチェック |
| ArrayIndexOutOfBoundsException | arr[5] | 配列サイズを確認 |
| ArithmeticException | 10 / 0 | 割る数をチェック |
| ClassCastException | (Integer) obj | instanceofで確認 |
| NumberFormatException | Integer.parseInt("abc") | try-catchまたはisNumeric |
| ConcurrentModificationException | ループ中のremove | Iteratorを使う |
8. 学習の進め方
Javaを学ぶ上で、実行時エラーの理解はとても大切です。
まずは、「絶対にJavaプログラマーになりたい人へ。」を読んで、エラーの種類や対処法の感覚を身につけましょう。
もし、実践的なコードのレビューや個別の指導を受けたい場合は、「サイゼントアカデミー」を活用するのがおすすめです!
まとめ
- 実行時エラーはプログラム中のミスや設計漏れで起こる
- NullPointerExceptionやIndexOutOfBoundsが代表格
- try-catchだけでなく、事前チェックで予防が重要
- エラーメッセージとスタックトレースを読めるようになろう!


コメント