こんにちは!tenjiprogrammingです。
この記事ではJavaでプログラムを書いているとよく出会うエラーの意味とその基本的な解決方法を解説します。
エラーを自分で解決できることはプログラミングの学習を進めていくにあたり非常に大切です。
とはいえ初めてのエラーには悩まされてしまうことも多いと思います。
一度見たことがあるエラーは解決がしやすいと思うので、この記事で色々なエラーを知っておきましょう!
Javaの学習方法についてはnoteで詳しく解説しています。そちらも見て頂けると嬉しいです。
NullPointerException
エラーの意味
NullPointerExceptionは参照型の変数がnullを指している時に発生する例外
「ぬるぽ」と呼ばれたりもします。
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は配列の無効なインデックスにアクセスしようとした時に発生する例外
エラーが発生するコード例
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で除算を行おうとしたときなどに発生します。
エラーが発生するコード例
public class Main {
public static void main(String[] args) {
int result = 10 / 0; // ゼロでの除算。ここでArithmeticExceptionが発生
}
}
解決策
- 数学的な計算を行っている箇所を確認
- 0での除算など数学的に許容されない計算を行っていないかチェック
IOException
エラーの意味
IOExceptionは入出力の処理中に問題が発生すると出る例外
例えば、ファイルを読み込もうとした際にそのファイルが存在しないとこの例外が発生します。
これもかなりよく出会うエラーだと思うので覚えておきましょう。
ちなみに「IO」は「In Out (入力・出力)」のことです。
エラーが発生するコード例
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文により適切に処理を行う
IllegalArgumentException
エラーの意味
IllegalArgumentExceptionはメソッドに不適切な引数が渡された時に発生する例外
エラーが発生するコード例
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のよくある悩みを解決する記事の他にも、ヌメロンの作り方など様々な記事を公開しています。
そちらも見て頂けると嬉しいです!
コメント