2

私は学んJavaでおり、私が知っているabstract classes and interfacesように、インスタンス化することはできません。ただし、のドキュメントには、抽象でもインターフェイスでもjava.lang.Systemないということはあり得ないと書かれています。instantiated

説明はありません。誰かがこれを説明できますか?

さらに、誰かがそのようなクラスを作成できますか?

4

5 に答える 5

8

簡単です。パブリックコンストラクターはありません。

あなたはそれを自分で行うことができます:

final public class Abc {
   private Abc() {}
}
于 2012-06-22T13:46:38.947 に答える
3

java.lang.Systemは、「静的」クラスのJavaバージョンです。これは、静的メソッドのみを持ち、使用する前にインスタンスを作成する必要がない、または作成できないクラスを意味します。

Javaではクラス定義(C#など)にキーワード「static」を使用できないため、このような静的クラスを実現する最善の方法は、コンストラクターをプライベートにすることです。例えば:

public final class System {
    private System() { throw new UnsupportedOperationException(); }

    public static void method1() { ... }

    ...other public static methods
}

これは絶対確実ではありません。コンパイラーによってチェックされますが、クラスはそれ自体のメソッドの1つからのみ作成されるように制限されます。これは、プログラマーが実行しないことを知っていることが期待されます(また、忘れた場合は例外によって通知されます)。

于 2012-06-22T13:57:50.733 に答える
2

クラスをインスタンス化するには、可視のコンストラクターが必要です。ただし、java.lang.Systemはこれを提供していません。

于 2012-06-22T13:46:08.290 に答える
2

簡単:クラスを作成して、拡張できないようにし、コンストラクターfinalを持たせると、機能しなくなります。privatenew System()

それがどのように機能するかSystemです。

于 2012-06-22T13:46:26.653 に答える
0

パブリックコンストラクターを持たないクラスをインスタンス化することはできません。プライベートコンストラクターを使用してクラスを作成し、それをfinalにして、他のクラスがそれを拡張できないようにするだけです。

public final class MyClass {
    private MyClass() {
    }
}

クラスのオブジェクトをインスタンス化するパブリック静的メンバー(シングルトンパターンを参照)、または静的メンバーのみが必要になることに注意してください。

于 2012-06-22T13:48:17.960 に答える