はじめに
おはこんばんにちは!鈴木です。
突然ですが、倒しても倒してもエラーに遭遇すると心が折れそうになりませんか?私はなります。
・エラーの解決方法などを何度も調べては忘れてしまったり…
・そもそもどのようにエラーと向き合ったらいいんだっけ?
となる私のような初心者の方向けに今回はJavaのエラーについてまとめてみたいと思います!
Javaのエラーの種類について
エラーには、Java プログラムの文法上の問題があったときに発生するコンパイルエラーと、
実行することが不可能な処理を行なおうとしたときに発生する実行時エラーの2つがあります。
簡単にそれぞれエラーの種類となぜ起きるかを紹介していきたいと思います!
コンパイルエラー
コンパイル時に検出されるエラーであり、Java 言語の文法に誤り(構文エラーや型エラー)があることでコンパイルができない場合に発生するエラーのこと。
これもよく見るエラーですね!
以下のポイントを確認して修正して再コンパイルすることで解決できます。
解決策
・大文字小文字を間違えている
・つづりを間違えている
・行末の ; が抜けている
・ . と , や ; と : などの記号を間違えている
・開きカッコ ( { [ と閉じカッコ ) } ] の数があっていない(開いたカッコが閉じていない)
・{ } ; などの記号が全角になっている
・空白部分に全角スペースを利用している
※コンパイルとは
コンパイルとは、人間が作成したソースコードをコンピュータが実行できるように変換すること。
実行時エラー
Javaの文法に誤りがなくコンパイルは通るが、使い方が誤っているなどの理由からプログラム実行時に発生するエラーのこと。
私が遭遇した実行時エラーを今回は3つ紹介します!
①NullPointerException
javaの代表エラーとして挙げられ、「ぬるぽ」とよく言われるエラーですね!
参照型の変数がnullを指している時に発生する例外です。
//出力結果
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "text" is null
at main.NullPointerExceptionExample.main(NullPointerExceptionExample.java:7)
上記例ではnullの入った値を7行目で呼び出していることでエラーが発生していますね。
解決策
- インスタンスの生成や値の設定が正しく行われているかをチェックする。
- オブジェクトがnullになってしまうタイミングをデバッグで確認する。
- プログラムでオブジェクトがnullかどうかのチェックを行い、エラーの発生をできる限り回避する。
②ArrayIndexOutOfBoundsException
配列の無効なインデックスにアクセスしようとした時に発生するエラーです。
//出力結果
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 3
at main.ArrayIndexOutOfBoundsExceptionExample.main(ArrayIndexOutOfBoundsExceptionExample.java:7)
ここでは配列の範囲外を指定しているため、7行目にてエラーが発生してしまっていますね。
解決策
- 正しい配列のインデックスを指定できているかチェックする。
- 配列の設定を繰り返し処理で行っている場合、繰り返し回数などに問題がないかチェックする。
③ArithmeticException
数学的に許されていない計算を行うとしたときに発生するエラーです。
//出力結果
Exception in thread "main" java.lang.ArithmeticException: / by zero
at main.ArithmeticExceptionExample.main(ArithmeticExceptionExample.java:6)
解決策
- ゼロ除算が行われてないかをチェックする。
- 数値型変数で計算している場合、割る数の変数にゼロが設定されていないかチェックする。
今回はとても有名なエラーについて取り上げてみました!
しかし、これ以外にもある様々なエラーに遭遇したらどのように対応していったらよいでしょうか。
次で対応策を検討したいと思います!
エラーに遭遇したら
①エラー文を読もう!
エラーに遭遇したらまずは慌てずに、勇気を出してエラー文をちゃんと読みましょう!これが意外と大事です!
上記のサンプルエラーコードの出力結果にもきちんとどこでどんなエラーが発生していたかを教えてくれていましたね。英語で慌ててしまうかもしれませんが、翻訳したりしてみましょう!
エラー文を読んでなんとなく目星をつけたら、次のステップです!
②検索とデバッグツールを活用しましょう!
目星をつけたあたりにブレークポイントを置いてみてデバッグを行ったり、メソッドの使い方が正しいかなどを検索してみましょう!
具体的な手順のイメージとしては以下です。
- どこを実行したタイミングでエラーが出たかを確認する
- その原因となった処理を特定する
- 何が正しい処理なのかを確認する
- 正しい処理になるよう修正する
端的に紹介してしまいましたが、大体のエラーは上記方針で対処できると思います。
(他のやり方があったらぜひ教えてください!)
ただ、私も含め初心者だと複雑な処理の場合はどこからエラーが起きているかなどを追うのが難しいこともあると思います。
その時は今回紹介した手順などで自身でもできるだけ調査を行い、分からないところを少しずつ明確にして先輩や有識者の方の力を借りられるようにできたらいいですね!
調べていくことでどんどん処理の解像度が上がっていくと思います!私も頑張ります…!
おわりに
今回、記述してみてエラーは意外と誤っているおおよその場所や理由を教えてくれたりする親切なヤツってことがわかりました。エラーは友達!敵じゃない!ってことですね!(?)
とは言ってもなかなか解決できるようになるまでは最初は難しいですが、解決していくことで少しずつ理解が深まるので、エラーに負けずに一緒に頑張りましょう!