3

JavaでMathのオブジェクトを作成しようとしています。理想的には、静的メソッドとパラメーターしかないため、そのようなインスタンスを作成する必要はありません。許可するかどうかにかかわらず、作成したいだけです。そのため、数学クラス オブジェクトを作成しているときに、数学クラス コンストラクターが表示されないというコンパイラ エラーが表示されます。

しかし、Math クラスのコードを調べたところ、明示的なコンストラクターが提供されていないため、Java は外部からアクセスできるデフォルトのコンストラクターを提供します。

4

4 に答える 4

5

これは正しい動作です。のコンストラクターにMathは、ユーティリティ メソッドprivateのみが含まれているため、次のようになります。static

private Math() {}
于 2013-02-09T15:19:50.697 に答える
2

これは Java docsからのものです。

public final class Math {

    /**
     * Don't let anyone instantiate this class.
     */
    private Math() {}
}

ドキュメントのコメント自体は、質問に答えるのに十分です。

于 2013-02-09T15:22:07.420 に答える
2

Math クラスの定義を見ると、そのコンストラクターはプライベートです。

private Math() {}

これは、クラスの作成者が、ユーザーがこのクラスのインスタンスを作成できるようにすることを望んでいないことを意味します。これはユーティリティ クラスであるため、理にかなっています。つまり、クラス内のメソッドはオブジェクトの状態に依存しません。メソッドのパラメーター値を渡すだけで、意図した結果が得られます。そのため、Math クラス内のすべてのメソッドは静的です。

于 2013-02-09T15:25:53.710 に答える
1

コンストラクターがプライベートであるため、実行できません。プライベート メソッドがリストされていないため、API にコンストラクターは表示されません。

たとえば、次の例を見てください。

public class SampleClass {

    private static int var1 = 1;
    private static int var2 = 1;
    private static int var3 = 1;


    private SampleClass () {
        // This constructor will prevent the default constructor from being invoked
    }

    public static void runMethod1() {
        System.out.println("Value is:" + var1);
    }

    public static void runMethod2() {
        System.out.println("Value is:" + var2);
    }

    public static void runMethod3() {
        System.out.println("Value is:" + var3);
    }

}

このクラスのインスタンスは、同じクラス内からのみ作成できます。他の場所から作成しようとすると、失敗します。

于 2013-02-09T15:19:44.287 に答える