Code Fix

上級

コンストラクタとメソッドの見分け方

戻り値型を書くとただのメソッドになります。既定コンストラクタが消える条件も扱います。

エラーメッセージの読み方

Main.java:5: error: constructor Main in class Main cannot be applied to given types;
Main.java
ファイル名
5
行番号 — javacが異常に気づいた位置。原因の行とは限りません
error
種別 — コンパイルエラー。実行まで到達しません
constructor Main in class Main cannot be applied to given types;
内容 — javacが期待していたもの、または見つけられなかったもの

このエラーが出る典型パターン

パターン1

 1  public class Main {
 2      int value;
 3      void   Main(int v) { this.value = v; }
           ^
 4      public static void main(String[] args) {
 5          System.out.println(new Main(3).value);
 6      }
 7  }
Main.java:5: error: constructor Main in class Main cannot be applied to given types; required: no arguments

戻り値型を書くとコンストラクタではなく普通のメソッドになります。引数なしの既定コンストラクタだけが残ります。

直し方: void(空) にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  public class Main {
 2      int value;
 3      Init       (int v) { this.value = v; }
             ^
 4      public static void main(String[] args) {
 5          System.out.println(new Main(3).value);
 6      }
 7  }
Main.java:3: error: invalid method declaration; return type required

コンストラクタ名はクラス名と完全に一致させます。違う名前は戻り値型のないメソッドと判断されます。

直し方: InitMain にします。

この問題を解いてみる →

パターン3

 1  public class Main {
 2      int value;
 3      Main(int v) { this.value = v; }
 4      public static void main(String[] args) {
 5          Main m = new Main(    );
                                ^
 6          System.out.println(m.value);
 7      }
 8  }
Main.java:5: error: constructor Main in class Main cannot be applied to given types; required: int found: no arguments

引数付きコンストラクタを定義すると、既定の引数なしコンストラクタは自動生成されなくなります。

直し方: (空)3 にします。

この問題を解いてみる →

よくある誤解

voidを付けてもエラーになりません。ただのメソッドになるので、「コンストラクタが呼ばれない」という症状で気づきます。

まとめ

コンストラクタとメソッドの見分け方は上級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)