エラー発生時の対処
3.3 エラー発生時の対処
プログラミングを行なっていると、様々なタイミングでエラーが発生する可能性があります。
エラーには、Java プログラムの文法上の問題があったときに発生するコンパイルエラーと、実行することが不可能な処理を行なおうとしたときに発生する実行時エラーの2つがあります。
コンパイルエラー
コンパイルエラーは、Java 言語の文法に誤りがあり、コンパイルができない(クラスファイルを生成できない)場合に発生します。コンパイルエラーの代表的な例として、次の 2 つがあります。
・ Java の構文に誤りがあるケース
・ ブロックの閉じ括弧を記述し忘れたケース
実行時エラー
Java の文法上には問題がなくても、使い方に問題があった場合に発生するエラーを実行時エラーといいます。
例えば、プログラムの計算で、「数を 0 で割る(0 で除算)」というような、「実行することが不可能な処理」を行なおうとしたときに起こります。
それでは、コンパイルエラーと実行時エラーを、意図的に発生させて、確認してみましょう。
3.3.1 コンパイルエラー ・・・ 構文の誤り(「;」セミコロンの付け忘れ)
コンパイルエラーが発生し、実行できないプログラムを作成し、実行結果を確認します。
ソース・フォルダー :myprow_intro/src
パッケージ :jp.co.f1.intro.ch3
名前 :CompileErrorTest
作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる
➢ CompileErrorTest.java
package jp.co.f1.intro.ch3; public class CompileErrorTest { public static void main(String[] args) { // 次の行でコンパイルエラー発生 System.out.println("コンパイルエラーの為に実行できないプログラムです。") } }
これは、println メソッドの括弧の中に書いた文字列をコンソールへ表示させるプログラムですが、エラーが発生します。どこが原因でエラーが発生しているのでしょうか。
図 3.3.1 : コンパイルエラー発生(「;」セミコロンの付け忘れ)
ソースコード上に、赤い波線と×印が表示されています。①の波線にマウスポインタを合わせてください。コンパイルエラーの内容が表示され、「 ; 」セミコロンを付け忘れていることが原因でコンパイルエラーが発生していたことがわかります。「 ; 」を正しい位置に記述し保管し、×印と波線が消えれば、コンパイルエラーが無くなったということになります。
3.3.2 コンパイルエラー ・・・ ブロックの閉じ忘れ
先ほどの CompileErrorTest.java のソースコードを変更し、先ほどとは原因の異なるコンパイルエラーを発生させてみましょう。10 行目の「 } 」を削除します。
➢ CompileErrorTest.java
package jp.co.f1.intro.ch3; public class CompileErrorTest { public static void main(String[] args) { // 次の行でコンパイルエラー発生 System.out.println("コンパイルエラーの為に実行できないプログラムです。"); } }
コンパイルエラーは、8行目で発生します。
図 3.3.2 : コンパイルエラー発生(ブロックの閉じ忘れ)
赤い波線にマウスポインタを合わせ、コンパイルエラーの原因を確認してください。「 } 」が無いことが原因でエラーが発生していることが表示されます。エラーを修正しましょう。
図 3.3.3 : コンパイルエラーメッセージの表示
Eclipse は、保存をするか入力したタイミングで随時コンパイルを行っています。今回の例の場合は、3 行目の括弧の対になる閉じ括弧( } )が無かったためにコンパイルエラーが発生しました。
このようなパターンのエラーは、インデントをきちんと行い、見やすいソースコードを書くことを心がけることで、ある程度防ぐことができます。
余計なエラーを発生させて無駄な時間を費やさないように、インデントをしっかり付ける習慣を身に付けておいてください。
括弧を閉じる場所を間違えたり、括弧を閉じ忘れたりということは、プログラミングの上級者でもよくやってしまうミスです。このミスを少なくするには、開く括弧( { )を書いたら、すぐに閉じる括弧( } )を書くことです。そして、括弧を書いた後に、そのなかに必用な処理内容を書いていきます。そうすることで、括弧の閉じ忘れを防ぐことができます。
しかし、どれだけ注意しても、必ずエラーは発生してしまうでしょう。ソースコード上に赤い波線と×印が出現したら、すぐに波線にマウスポインタを合わせ、エラーの原因を調査しましょう。
3.3.3 実行時エラー ・・・ 0 除算
次に、「実行時エラー」が発生するプログラムを作成します。実行時エラーは、Java の文法上には問題がなくても、使い方に問題があった場合に発生するエラーです。
ソース・フォルダー :myprow_intro/src
パッケージ :jp.co.f1.intro.ch3
名前 :DivisionByZero
作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる
➢ DivisionByZero.java
package jp.co.f1.intro.ch3; public class DivisionByZero { public static void main(String[] args) { System.out.print("4 / 2 = "); // 文字列を表示 System.out.println(4 / 2); // 4/2 の答えを表示 System.out.print("4 / 0 = "); // 文字列を表示 System.out.println(4 / 0); // 実行時エラー } }
実行結果
コンパイルエラーの印が表示されること無く保存が完了したら、実行してください。
実行結果は次のようになります。※環境により、エラーメッセージの位置や順序が異なる場合があります。
図 3.3.4 : 実行時エラーメッセージ(ゼロ除算)
これは「ゼロ除算」と言って、プログラムの計算で、「数を 0 で割る(0 で除算)」というような「実行することが不可能な処理」を行なおうとしたときに起こるエラーです。プログラミング言語によって、0 除算の扱いが異なりますが、Java では実行時エラーが発生します。
このように、Java の文法上は問題が無くても、実際にプログラムを実行してみるとエラーになる場合もあります。実行時エラーの対処方法は、詳しくは後の「Java 基礎テキスト」で取り上げますので、現段階ではこのようなパターンのエラーがあることを記憶にとどめておいて下さい。
論理エラー論理エラーとは、プログラムの実行結果が意図した通りにならないエラーのことです。論理エラーが発生した場合は、記述したプログラムの流れをよく見直してみて下さい。