はじめに
Javaでプログラムを書いていて、コンパイルまではうまくいったのに、いざ実行してみたら…
1 |
Exception in thread "main" java.lang.NullPointerException<br> |
というようなエラーメッセージが出て、プログラムが止まってしまったことはありませんか?
これは「実行時エラー」と呼ばれるもので、プログラムの実行中に発生する予期しない問題です。今回は、そんな実行時エラーの種類と対処法を初心者向けにわかりやすく解説します!
1. 実行時エラーとは?
**実行時エラー(Runtime Error)**とは、Javaプログラムが正常にコンパイルされてから実行中に発生するエラーのことです。
コンパイル時には見つからないエラーが、実際にプログラムが動いたときにだけ発生するため、初心者にとって特に対処が難しいと感じる部分です。
2. Javaでよく起きる実行時エラーの種類
実行時エラーの多くは、RuntimeException
というクラスを継承した非チェック例外として発生します。
✅ NullPointerException
最もよく見る実行時エラー。null
の変数にアクセスしたときに発生します。
1 |
String name = null;<br>System.out.println(name.length()); // NullPointerException<br> |
✅ ArrayIndexOutOfBoundsException
配列の範囲外にアクセスしたときに発生。
1 |
int[] nums = {1, 2, 3};<br>System.out.println(nums[3]); // IndexOutOfBounds<br> |
✅ ArithmeticException
数学的に無効な演算、特に0で割ったときに発生します。
1 |
int result = 10 / 0; // ArithmeticException<br> |
✅ ClassCastException
オブジェクトの型を間違って変換しようとしたときに発生。
1 |
Object obj = "Java";<br>Integer num = (Integer) obj; // ClassCastException<br> |
✅ NumberFormatException
文字列から数字への変換で不正なフォーマットだったときに発生。
1 |
int number = Integer.parseInt("abc"); // NumberFormatException<br> |
✅ ConcurrentModificationException
リストなどのコレクションをループ中に変更しようとしたときに発生。
1 |
List<String> list = new ArrayList<>();<br>list.add("Java");<br>for (String s : list) {<br> list.remove(s); // ConcurrentModificationException<br>}<br> |
3. JVMエラー(Error)とは?
RuntimeException
の他に、Error
という深刻な実行時エラーもあります。
❗ OutOfMemoryError
メモリ不足のときに発生します。
❗ StackOverflowError
再帰呼び出しが深くなりすぎたときに発生。
1 |
public void loop() {<br> loop(); // 無限再帰 → StackOverflowError<br>}<br> |
4. スタックトレースの読み方
実行時エラーが起きると、Javaは「スタックトレース」という情報を表示します。
1 |
Exception in thread "main" java.lang.NullPointerException<br> at Main.main(Main.java:5)<br> |
- Main.java:5 → 5行目でエラーが発生した
- メソッド名やファイル名、行番号から原因を追跡できます!
5. 対処法:try-catchで安全に
例:0で割るエラーの対処
1 |
try {<br> int result = 10 / 0;<br>} catch (ArithmeticException e) {<br> System.out.println("0では割れません!");<br>}<br> |
ただし、全てをtry-catchに頼るのはNG!
根本的な原因は、プログラム設計や入力チェックの不足です。
6. 予防のためにやるべきこと
✅ nullチェックをする
1 |
if (name != null) {<br> System.out.println(name.length());<br>}<br> |
✅ 配列やリストの範囲を確認する
1 |
if (index >= 0 && index < array.length) {<br> System.out.println(array[index]);<br>}<br> |
✅ 型を確認する(instanceof)
1 |
if (obj instanceof Integer) {<br> Integer num = (Integer) obj;<br>}<br> |
✅ コレクションはIteratorで安全に削除
1 |
Iterator<String> it = list.iterator();<br>while (it.hasNext()) {<br> String s = it.next();<br> it.remove();<br>}<br> |
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だけでなく、事前チェックで予防が重要
- エラーメッセージとスタックトレースを読めるようになろう!
コメント