1

以下のコードは、 4行目にエラーを示しています

class MyClass{

    public MyClass(int a){ } //Line 2

    public static void main(String a[]){
        MyClass n = new MyClass(); //Line 4
        System.out.print("TRUE");
    }
}

しかし、行 2を削除すると、エラーなしで実行されます。ただし、デフォルトのコンストラクターは追加しませんでした。なんで ?

4

6 に答える 6

4

明示的なコンストラクターを指定していない場合にのみCompiler、クラスにを提供することを忘れないでください。default constructorパラメーター化された、または 0-arg の独自のコンストラクターを宣言するとすぐに、コンパイラーはデフォルトのコンストラクターを提供しません。

コードで、パラメーター化されたコンストラクターを宣言しましたが、コンパイラーはデフォルトのコンストラクターを提供しません。したがって、実際には引数なしのコンストラクターがないため、使用できません。

2行目を削除すると、エラーなしで実行されます。ただし、デフォルトのコンストラクターは追加しませんでした。なんで ?

もちろん、行 2を削除すると、明示的なコンストラクターが宣言されていません。この場合、コンパイラーはデフォルトの引数 0 のコンストラクターを追加するため、コードは成功します。また、デフォルトのコンストラクターはコンパイラーによって提供されるものであることに注意してください。引数 0 のコンストラクターを宣言すると、それはデフォルトのコンストラクターではなく、引数0のコンストラクターと呼ばれます。

0-arg constructorしたがって、パラメーター化されたコンストラクターを宣言するときはいつでも、もちろんそれを使用している場合は、明示的に宣言することも確認してください。

public MyClass() {
}
于 2012-11-28T17:34:19.893 に答える
2

各クラスには、引数を取らない暗黙のデフォルト コンストラクターがあります。ただし、args を使用してコンストラクターを宣言すると、既定のコンストラクターは省略されます。したがって

MyClass n = new MyClass();

コンパイルに失敗します。

クラスは複数のコンストラクターを持つことができ、他のコンストラクターがある場合はデフォルトの引数なしコンストラクターを明示的に宣言できることに注意してください。例えば

class MyClass{
    public MyClass(int a){ } 
    public MyClass(String a){ } 
    public MyClass(){ }  // no-arg declaration now required
}
于 2012-11-28T17:34:53.637 に答える
0

これは、パラメーターを使用してコンストラクターを宣言すると、パラメーターを使用しない既定のコンストラクターは使用できなくなるためです。

于 2012-11-28T17:35:09.767 に答える
0

クラスにコンストラクターが定義されていない場合は、コンパイラーのみ
がデフォルトのコンストラクター (引数なし) を自動的に挿入します。

于 2012-11-28T17:44:42.490 に答える
0

クラスのデフォルト コンストラクターがありません。パラメーター化されたコンストラクターのみが含まれています。ただし、デフォルトのコンストラクターを使用して初期化しています。そのため、4行目でエラーが発生します。コードにデフォルトのコンストラクターを次のように追加します

デフォルトのコンストラクターを持つ作成オブジェクトとして、MyClass n = new MyClass(); コードにはデフォルトのコンストラクターが必要です。

public MyClass(){ }

これで、エラーなしで動作します。

パラメータ化されたコンストラクターを使用する場合は、以下のようにオブジェクトを作成します。

MyClass n = new MyClass(pass parameter here); 
于 2012-11-28T17:37:23.403 に答える
0

パラメータ化された cunstructor を作成すると、独自のデフォルト コンストラクタを作成しない限り、デフォルト コンストラクタは削除されます。

したがって、以下のようにコンストラクターを作成する必要があります。

public MyClass(){}
于 2012-11-28T17:47:31.367 に答える