【初心者向け】よく出会うJavaのエラーと対策7選!

  • このエントリーをはてなブックマークに追加
  • Pocket
java エラー

プログラミング初心者にとってなかなか苦労するのが、エラーが出たときのバグ取りだろう。

Javaだとコンパイラでチェックをしてくれるが、そこで出てくるエラーも対処がわからないことが多いはずだ。

このページでは初心者の方がよく出会うJavaのエラーについてまとめてみた。参考にしていただければと思う。

Javaのエラー表示について

Javaプログラミングでよくあるエラーを紹介する前に、どのような書式でエラーが表示されるかを見ておこう。

まだ中身がわからない方も多いと思うので、参考程度に見ていただくだけでも十分だ。後で役に立つ。

たとえば、このようなプログラムを作ったとしよう。

"main"メソッドから"setArray"メソッドを呼び出して、配列"list"に値を設定するものだ。 

このプログラムを実行すると、後でも紹介するエラーのひとつ"ArrayIndexOutOfBoundsException"が発生する。

それでは、このエラー表示を読み解いてみよう。 

  • 1行目にはどのようなエラーが発生したかが表示される。この場合は"ArrayIndexOutOfBoundsException"だ。
  • 2行目の"at"以降には、どこでエラーが発生したのかが表示される。この場合はjavaの13行目だ。
  • 3行目以降も"at"が続き、どこでエラーが発生したのかが表示される。2行目は実際にエラーが発生した場所だが、3行目以降はエラーが発生したメソッドを呼び出した場所が表示される。

このプログラムでは"main"メソッドから"setArray()"メソッドを呼び出しているので2階層になっているが、実際のプログラムではもっと複雑な構成になることが多い。その場合、3行目以降に何行も呼び出しクラスが表示されることになる。

エラーの解析を行うには、この情報をもとに、どのような経緯でエラーが発生したクラスやメソッドが呼び出され、どのクラスやメソッドに問題があるかを解析する必要がある。 

なお、このようなエラー情報はスタックトレースと呼ばれ、Javaが実行時に使用する"スタック"というメモリー領域に記録される情報を表示している。

スタックトレースはデバッグには欠かせない、何かと役にたつ重要な情報なので覚えておこう。

Javaのエラーとその対策

それでは、代表的なエラーとその対策を紹介しよう。

java.lang.NullPointerException

エラー内容

このエラーはnullのオブジェクトに対してアクセスしようとしたときに発生する。プログラミング時に比較的発生しやすいエラーで、エンジニアの間では「ヌルポ」と呼ばれている。

サンプルプログラム

実行結果 

対策

  • インスタンスの生成や値の設定が正しく行われているかをチェックする。
  • オブジェクトがnullになってしまうタイミングをデバッグで確認する。
  • プログラムでオブジェクトがnullかどうかのチェックを行い、エラーの発生をできる限り回避する。

java.lang.ArrayIndexOutOfBoundsException

エラー内容

配列のインデックスとして存在しない要素を指定した場合に発生するエラーで、先ほどのエラーの例でも紹介した。配列のインデックスとして1~10のインデックスしかないところ、20のインデックスに値を設定しようとする場合などに発生する。

サンプルプログラムと実行結果は最初に紹介した例を参照してほしい。

対策

  • 正しい配列のインデックスを指定できているかチェックする。
  • 配列の設定を繰り返し処理で行っている場合、繰り返し回数などに問題がないかチェックする。

java.lang.NumberFormatException

エラー内容

このエラーは文字列の値を数値に変換(キャスト)しようとしたが、文字列に数値として正しくない値が設定されている場合に発生する。

サンプルプログラム

実行結果

対策

  • 文字列にアルファベットや記号など、数値以外の文字が設定されていないかチェックする。
  • 文字列に空白やnullが設定されていないかチェックする。
  • 文字列には数値が設定されているが、変換しようとしている数値型で扱える値の範囲をオーバーしていないかチェックする。

java.lang.ClassCastException

エラー内容

このエラーはあるクラスを変換できないクラスにキャストしようとした時に発生する。

サンプルプログラム

実行結果

対策

  • 配列などに設定した値のクラスと、値を取り出す時にキャストしようとしている型が一致しているかをチェックする。
  • 継承関係のある2つのクラスで、サブクラスにスーパークラスをキャストしようとしていないかをチェックする。

java.lang.ArithmeticException

エラー内容

このエラーは数値の計算において、不正な算術処理が行われた場合に発生する。例えば数学的にあり得ない「ゼロ除算(10÷0 など)」が発生するとこのエラーが発生する。

サンプルプログラム

実行結果

対策

  • ゼロ除算が行われてないかをチェックする。
  • 数値型変数で計算している場合、割る数の変数にゼロが設定されていないかチェックする。

java.lang.NoClassDefFoundError

エラー内容

メソッドを呼び出す時や、インスタンスを生成しようとしている時に、Javaがクラス定義を読み込むことができないエラーだ。

対策

  • 環境変数CLASSPATHが誤っている可能性があるのでチェックする。
  • ファイル名やパッケージ名に誤りがないかチェックする。
  • プログラムに必要な外部ファイル(jar)が読み込まれているかチェックする。

java.lang.OutOfMemoryError

エラー内容

Javaは実行時にスタック領域とヒープ領域という2つのメモリー領域を使用するが、このエラーはプログラムの実行に必要なヒープ領域のメモリーサイズが不足した時に発生する。

ヒープ領域とはクラスやメソッドの定義など、オブジェクトのインスタンスが割り当てられるメモリー領域のことだ。

対策

  • プログラム内で無限ループになっていしまっている箇所がないかチェックする。
  • 一度に大量のデータを処理しようとしている箇所がないかチェックする。
  • 不必要にスコープ(公開範囲)が広いメソッドや変数を多用していないかチェックする。

このエラーの場合、環境によってはJVM(Java仮想マシン)のヒープ領域のメモリーサイズをチェックし、必要な場合はチューニングすることが可能だ。ただし、チューニングすることで別のアプリケーションのメモリーが不足するケースなどもあるので、注意が必要だ。

JVMのヒープ領域のチューニングについては、別の機会で紹介することにする。

まとめ

このページでは初心者の方がよく捕まるJavaのエラーについてまとめてきた。

ここの辺りのエラーを対処できれば、概ねプログラミングするときに困ることがなくなるはずだ。ぜひ参考にしていただければと思う。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*