Javaのエラーの見方とよく出るエラー一覧【コード・解決方法有】

こんにちは!tenjiprogrammingです。

この記事ではJavaでプログラムを書いているとよく出会うエラーの意味とその基本的な解決方法を解説します。
エラーを自分で解決できることはプログラミングの学習を進めていくにあたり非常に大切です。

とはいえ初めてのエラーには悩まされてしまうことも多いと思います。

一度見たことがあるエラーは解決がしやすいと思うので、この記事で色々なエラーを知っておきましょう!

Javaの学習方法についてはnoteで詳しく解説しています。そちらも見て頂けると嬉しいです。

目次

NullPointerException

エラーの意味

NullPointerException参照型の変数がnullを指している時に発生する例外

「ぬるぽ」と呼ばれたりもします。
Javaだけではないですが、一番有名な例外(エラー)かもしれません。

エラーが発生するコード例

Java
public class Main {
    public static void main(String[] args) {
        String text = null;
        int length = text.length();  // ここでNullPointerExceptionが発生
    }
}

String型の変数textにnullを代入しています。
代入と言いましたがString型は参照型の変数なので、textが指し示す先がnullということです。

このtextに対してlength()メソッドを使おうとすると、textが参照している先がnullなのでNullPointerExceptionが発生します。

解決策

  • 参照型の変数の指し示す先がnullではないことを確認する
  • Optionalクラスを使用する。
    (Optionalクラスについては公式ドキュメントを参照)

ArrayIndexOutOfBoundsException

エラーの意味

ArrayIndexOutOfBoundsException配列の無効なインデックスにアクセスしようとした時に発生する例外

エラーが発生するコード例

Java
public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};
        int number = numbers[3];  // 配列のインデックスは0から2まで。ここでArrayIndexOutOfBoundsExceptionが発生
    }
}

int型のnumbersという配列に1,2,3と要素を3つ格納しています。

要素が3つということは、この配列の有効なインデックスは0から2です。

その配列に対してnumbers[3]などとアクセスしようとすると、この例外が発生します。

簡単にいうとこのインデックスに対応する要素はないよ、とおしえてくれています。

解決策

  • 配列にインデックスを用いてアクセスする際に
    無効なインデックスを用いていないか配列のサイズなどをみながら確認

ClassNotFoundException

エラーの意味

ClassNotFoundException指定されたclassが見つからないときに発生する例外

定義していないclassを指定すると発生します。そのままなのでコードの例は割愛します。

解決策

  • クラスパスを指定するときに、そのクラスパスが正しいかどうかを確認
  • パッケージなどの依存関係がプロジェクトに正しく読み込まれていることを確認

ArithmeticException

エラーの意味

ArithmeticException数学的に許されていない計算を行うとしたときに発生する例外

例えば、0で除算を行おうとしたときなどに発生します。

エラーが発生するコード例

Java
public class Main {
    public static void main(String[] args) {
        int result = 10 / 0;  // ゼロでの除算。ここでArithmeticExceptionが発生
    }
}

解決策

  • 数学的な計算を行っている箇所を確認
  • 0での除算など数学的に許容されない計算を行っていないかチェック

IOException

エラーの意味

IOException入出力の処理中に問題が発生すると出る例外

例えば、ファイルを読み込もうとした際にそのファイルが存在しないとこの例外が発生します。

これもかなりよく出会うエラーだと思うので覚えておきましょう。
ちなみに「IO」は「In Out (入力・出力)」のことです。

エラーが発生するコード例

Java
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        FileReader file = new FileReader("nonexistentfile.txt");  // 存在しないファイルを読み込もうとする。ここでIOExceptionが発生
    }
}

上記のコードで”nonexistent file.txt”というテキストファイルを読み込もうとしています。
その際にこのファイルが存在していないと、IOExceptionが発生します。

解決策

  • ファイルパスやファイル名などを確認
  • 例外をtry〜catch文により適切に処理を行う

try catch文は、例外が発生した時の処理を定義するときに使います。
あらかじめ発生しうる例外がわかっている場合に使います。
例えば、ユーザーからの入力を受け取るプログラムだと、ユーザーが間違った入力をするたびにエラーでアプリが落ちたら使い物になりませんよね。
なのでtry catch文で例外が発生したらエラーメッセージを表示するなどの処理を記述しておきます。

IllegalArgumentException

エラーの意味

IllegalArgumentExceptionメソッドに不適切な引数が渡された時に発生する例外

エラーが発生するコード例

Java
public class Main {
    public static void main(String[] args) {
        printAge("hello");  // 不正な引数。ここでIllegalArgumentExceptionが発生
    }

    public static void printAge(int age) {
        System.out.println("年齢: " + age);
    }
}

上記の例では、printAge()というメソッドをint型の引数を受け取り、それを表示するという処理で定義しています。

しかし、実際にprintAge()メソッドをコールする場所では引数にString型の文字列を渡しています。
これはこのメソッドにとって不正な引数なのでIllegalArgumentExceptionが発生します。

解決策

  • 例外が発生している箇所を確認し不正な引数を渡していないか確認

エラーメッセージに例外が発生している行数が書かれています。

まとめ

今回はJavaのエラー(例外)についてよく出るものをまとめました。

始めたての頃に見たこともないエラーに遭遇すると焦ってしまいますよね。

実際にそのエラーが発生するコード例と基本的な解決策もまとめたのでしっかり理解して、実際に自分で開発する時に出会っても怖がらず解決できるようになりましょう。

当サイトではJavaのよくある悩みを解決する記事の他にも、ヌメロンの作り方など様々な記事を公開しています。
そちらも見て頂けると嬉しいです!

あわせて読みたい
よく使うJavaのメソッド一覧【サンプルコード有り】 Javaでのプログラミングにおいて、String、Aray List、HashMap、Mathクラスは非常に頻繁に使用されます。これらのクラスには、コーディングを効率化するための便利なメ...
あわせて読みたい
【Java】初心者~上級者まで!レベル別の参考書【レビュー付き】 この記事ではJavaの参考書をレベル別にまとめます。全て実際に使った人の声や口コミもあるので自分に合いそうな参考書を選んで学習してください!私も人にプログラミン...
tenjiprogramming
20代エンジニア。
メインで使用している言語はJava/JavaScript/TyoeScript/react/C言語
AWSなどクラウド周りも経験あり。
楽しいをモットーに記事を書いています。
Noteではサンプルコード付きのゲームの作り方など様々な内容を公開しています。
そちらも是非ご覧ください!
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次