コンパイルエラーと実行時エラー

広告

プログラムを実行した時、思ったとおりに実行できればいいのですが、プログラムの記述ミスがあったりするとエラーが発生します。エラーが発生する可能性があるのはコンパイルをした時とプログラムを実行した時の2つがあります。ここではわざとエラーを発生させてみてどのように表示されるのか確認します。

コンパイルエラー

コンパイルの時点でエラーとなった場合は、プログラムの中にJavaの文法に合っていない記述が含まれていることを表しています。

例として次のようなプログラムを作成します。

class errtest{
  public static void main(String args[]){
    System.out.println(こんにちは");
  }
}

3行目が本来「("こんにちは");」とすべきところ「(こんにちは");」と「こ」の前のダブルクオーテーションを記述し忘れたとします。このプログラムを「errtest.java」として保存しコンパイルしてみます。

p5-1

このようにプログラムの中に文法上の間違いがある場合はコンパイル時にエラーとして表示されます。エラーの時にはどの部分が間違っているのかヒントとなる情報が表示されますので、エラーを修正して再度コンパイルして下さい。

なおコンパイルが成功しないと実行ファイルは作成されません。その為、全てのエラーが無くなるまでプログラムを実行することはできません。

実行時エラー

コンパイルは問題無かったがプログラムの実行時にエラーとなる場合があります。このような実行時エラーはプログラムは文法的には間違っていないが使い方に問題がある場合に発生します。

2つほど例をあげて確認してみます。まずプログラムを学習し始める時にによく発生するエラーがファイル名が間違っている場合です。

class errtest2{
  public static void main(String args[]){
    System.out.println("こんにちは");
  }
}

上記のようなプログラムを記述し「errtest.java」として保存してみます。

プログラムの記述と保存」でも記述した通り、プログラムのファイル名は「クラス名.java」である必要があります。今回の場合は「errtest2.java」としなければいけませんでしたが「errtest.java」としてしまいました。

ではまずコンパイルを行います。

p5-2

コンパイルはエラーがなく無事終了しました。次に作成された実行ファイルを使ってプログラムを実行してみます。

p5-3

いざプログラムを実行すると次のエラーが発生します。

Exception in thread "main" java.lang.NoClassDefFoundError

このエラーは必要としているクラスが見つからない場合に発生するエラーです。実行時に指定したクラス名が「errtest」なのにプログラムの中に「errtest」ではなく「errtest2」しか見つからなかったためエラーとなっています。この場合にはプログラムの中で記述したクラス名とファイル名が見比べてみて下さい(他の原因でこのエラーが発生する場合もあります)。

もう一つ例をあげてみます。プログラム自身は少し難しくなりますので、ここでは参考程度に見ておいて下さい。

class errtest{
  public static void main(String args[]){
    String[] name = new String[2];
    name[0] = "山田さん";
    name[1] = "林さん";

    for (int i = 0; i < 3; i++){
      System.out.println(name[i]);
    }
  }
}

上記を「errtest.java」として保存します。まずコンパイルを行います。

p5-4

コンパイルはエラーがなく無事終了しました。次に作成された実行ファイルを使ってプログラムを実行してみます。

p5-5

今回はプログラムが一部実行されています。「山田さん」「林さん」という文字列が表示されたあと、その次の処理でエラーが発生しプログラムが強制終了しています。このようにプログラムが実行はされたが、その途中でエラーのため終了してしまう場合もあります。

ここまで見てきたようにコンパイルの時点でエラーとなる場合とプログラムの実行の時点でエラーが発生する場合があります。どちらの場合であってもエラーメッセージには何らかの参考になる情報が表示されていますので、再度プログラムを見直して問題箇所を修正するようにして下さい。

( Written by Tatsuo Ikura )