1

既存のクラスがあれば、新しいオブジェクトを作成できるという印象を受けました。

public final class Suit implements Comparable {
  private String name;
  private String symbol; 

  public final static Suit CLUBS = new Suit( "Clubs", "c" );

これはどのように作動しますか?メインで行うのではなく、独自のクラス内で初期化する利点は何ですか?

前もって感謝します。

4

4 に答える 4

2

クラス自体はオブジェクトであり、クラス型のオブジェクトを取得するnewInstance()などのメソッドを実装します。それが最も明確な定義ではなかったことは知っていますが、これがどのように機能するかを示しています。

MyClass型の新しいオブジェクトを作成するときはいつでも、クラスローダーは最初にクラスを表すオブジェクトを取得して作成します。

Class<?> MyClassObject

これは、すべての「静的」変数のサイレント構築を実行します。次に、プログラムはMyClassObjectにMyClassのインスタンスを要求します。

MyClass object = MyClassObject.newInstance()

静的変数とメソッドはMyClassObjectに属しますが、インスタンス変数はMyClassに属します

于 2012-04-20T22:34:15.120 に答える
1

CLUBS は静的であることに注意してください。オブジェクトの一部ではありませんが、クラス全体に属しています。

メインでCLUBSを初期化することもできましたが、その後

  1. CLUBS は、メイン メソッド内でのみ表示されます。
  2. メイン メソッドなしで Java を実行すると (たとえば、Web ページには CLUBS がありません)
于 2012-04-20T22:28:32.303 に答える
0

インスタンス化の時点で、クラス構造に関するすべての情報が利用可能であり、インスタンス化できるため(静的または非静的フィールドに関係なく)、問題はありません。

これは再帰的定義のようなものです-これは完全に合法です:

   Node:
      Node parent;
      Node left;
      Node right;
于 2012-04-20T22:31:58.293 に答える
0

これは、タイプセーフな列挙型(Java 1.5より前)またはシングルトンクラスの典型的なシナリオです。宣言サイトで初期化することの利点は、これがフィールドを作成する唯一の方法であるということですfinal。これは、それ自体が非常に重要な特性です。

于 2012-04-20T22:32:30.553 に答える