よくあるコンパイルエラーと対処方法
よくあるコンパイルエラーと対処方法【ゼロから始めるJavaの基礎~その5~】
前回は実際にJavaのプログラムを作成して実行をして頂きました。スムーズに実行まで出来た方もいれば、思うように進まずに何度もコードを見直して修正した方もいるかもしれません。
コンパイル時に発生するエラーのことを『コンパイルエラー』といい、何かしらの原因でJavaプログラムを記述したファイルのコンパイルが出来なかった際に発生します。
今回はJavaを学び始めた直後に遭遇しがちなコンパイルエラーと、主な対処方法をご紹介します。
まずは実際にエラーが発生した際に表示されるエラー画面のサンプルを参考にエラーメッセージの見方を説明します。
メッセージは『(ファイル名):(行数):(エラーの種類):(エラーの内容)』という構成になっています。
前回無事にコンパイルと実行が出来たコードと、今回コンパイルしようとして失敗したコードは以下のような内容です。
【前回文:成功】
class FirstJava {
public static void main(String[] args) {
System.out.println("初めてのJava");
System.out.println("実行時は文字列だけが表示されます");
}
}
【今回分:失敗】
class FirstJava {
public static void main(String[] args) {
System.out.println("初めてのJava")
System.out.println("実行時は文字列だけが表示されます")
}
もちろん今回はエラーが発生するようなコードをわざと用意しました。前回実施した方法と同じ方法でコンパイルをしようとするとエラーが発生します。枠線で囲った場所がエラーメッセージです。
今回の場合だと、枠線で囲った部分の上から2行ずつ、3件のエラーが発生しています。内容は先ほどご紹介した通り 『(ファイル名):(行数):(エラーの種類):(エラーの内容)』 となっていますが、分かりづらいので表形式に分解してみましょう。
ファイル名 | エラーの種類 | 行数 | エラーの内容 | |
1件目 | FirstJava.java | エラー | 3 | ';’がありません |
2件目 | FirstJava.java | エラー | 4 | ';’がありません |
3件目 | FirstJava.java | エラー | 5 | 構文の解析中にファイルの終わりに移りました |
表形式に直すと少し見やすくなりましたでしょうか?
1件目は『FirstJava.java』というファイルの3行目で『;』が足りませんと教えてくれています。確かに前回コンパイルが成功したコードと比較してみると文末の『;』が不足しているのが分かりますね。
2件目は4行目で1件目と同じエラーが発生しています。
3件目は5行目のコードを実行しようとしたところ、『構文の解析中にファイルの終わりに移りました』という結果になってしまったようですね(笑) このエラーの内容については後述しますが、文の最後に『}』が一つ不足しているのが原因です。
エラーメッセージの下にセットで表示されている文字列は「このあたりでエラーが出ているよ~」という情報を『^』記号で教えてくれています。
が、しかし!この記号の位置は「ばっちりここだよ!」というような正確性はありません…。だいたいこのあたりというレベルだと思っておいたほうがよいでしょう。
エラーメッセージの見かたは掴めましたか?エラーは問題となっている箇所を探すために非常に大切な手がかりとなりますので、食わず嫌いをせずに読めるようにはなっておきましょうね(笑)
ここからは皆さんがこれからJavaの基礎を学んでいく上で遭遇しやすいと思われるコンパイルエラーと対処方法をご紹介します。
①「’javac’は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません」
このエラーが発生した際は、こちらの記事で紹介した環境変数の設定が正しく出来ていない可能性があります。もう一度設定を見直してから再度コンパイルを試みて下さい。
②「ファイルが見つかりません」、「ファイルが読み込めません」
これらのエラーはそもそも、コンパイル対象のファイルを見つけられていないことが原因であることが多いです。
javacコマンドの後ろに指定したファイル名にタイプミスは無いか、拡張子は合っているか、javacコマンドを実行しているカレントディレクトリが、ファイルの保存されているフォルダと一致しているかなどを確認してみましょう。
③「構文解析中にファイルの終わりに移りました」
このエラーは『{}(中括弧:ちゅうかっこ)』の記述忘れや、記述場所の誤りによって発生することが多いエラーです。Javaにおいて『{}』は重要な意味を持つ記号です。
このエラーが出たときは『{}』の数が合っているか、記述場所があっているかの確認から始めると良いでしょう。
④「シンボルを見つけられません」、「○○がありません」、「式の開始が不正です」
このエラーは構文の誤りが原因で発生することが多いエラー内容です。
今は「構文?」という状態の方がほとんどだと思いますが、javaプログラムを作成する際には様々なお決まりの書き方やルールといったものが存在します。
今のところはそういったお決まりの書き方やルールにそぐわない記述がされていた場合に発生するものという解釈で大丈夫です今回ご紹介したサンプルも『;』が不足していたことでルール違反になってしまっていたんですね。
もちろんタイプミス(スペルミス)によって構文通りになってないことからもこの様なエラーが発生しますので、タイプミスがないかの確認も併せて行いましょう。
さて、ここまでコンパイルエラーと対処方法についてご紹介をさせて頂きました。ここで紹介したエラーは全体のほんの一部です。今後様々なエラーに出会うことになるとは思いますが、エラーの解消が出来るようになるには沢山のエラーに出会っておくことも重要な経験となります。
見たことのないエラーが発生したらエラーメッセージをググるなどして、解決の手がかりを探しましょう!「ああでもない、こうでもない」と試行錯誤することが必ず実力アップにつながります。
そして、いつかは最初は大嫌いだったエラーも、「手がかりをくれるだけよかった」と思えるようになりますし、「JDKってまじで仕事出来るな!」なんて感心するような日が来るかもしれません。(※いつかエラーは出ていないのに、期待通りの結果が出ないだとか、結果が出ない以前に動かないなどの状況になった時に、エラーのありがたさに気づけると思います。)
今回はコンパイルエラーについてご紹介をしました。せっかく書いたプログラムでエラーが出るとへこんだり萎えたりやる気をなくしたりイライラしたり。たくさんそんなことがありましたし、そうなっている人も沢山見てきました。
それでも数をこなすことで簡単にエラーを解消できるようになったり、そもそも発生させる回数が減ったりします。
エラーを解決できた時の達成感というのも、またプログラミングのやりがいであると思います。それと同時に初心者の方にとっては大きく高い壁にもなるのがエラーです。全員が通る道だと思って、気楽に行きましょうね。どうしても解決できない日はあきらめて翌朝もう一度見てみると案外簡単に原因が特定できて解決できたりしますのでお勧めです(笑)
次回は『Eclipse』というプログラマーの相棒とも呼べるであろうツールをご紹介します。