3

私はJavaを初めて使用します。言語仕様を調べていたときに、静的クラスを宣言できないことがわかりましたが、静的内部クラスを持つことはできます。なぜトップレベルの静的クラスを持つことができないのか、私は少し混乱しています。ユーティリティメソッドのみを含むクラスを作成したい場合は、静的クラスに進むことができます。Javaの開発者がこの機能を制限した理由は何ですか?

4

5 に答える 5

7

トップレベルクラスは、定義上、すでにトップレベルであるため、静的と宣言しても意味がありません。そうすることはエラーです。

静的クラス宣言

于 2013-02-09T06:35:31.147 に答える
7

これは制限ではありません。ユーティリティクラスを定義する必要はありませstatic class。必要なのは。だけですstatic methods。たとえばMath、Javaのクラスは静的メソッドでいっぱいですが、クラス自体は静的ではありません

inner class静的クラスが必要になるのは、Javaで許可されている、囲んでいるクラスのインスタンスを作成せずに使用するを定義する場合のみです。

ユーティリティクラスは次のように定義できます。

class Util {
  public static void method(){
     // your utility method
  }
}
于 2013-02-09T06:47:26.947 に答える
4

staticは相対的な用語です。

static「含まれているインスタンスから独立している」という意味です。したがって、静的フィールドは、クラスのインスタンスに関係なく、同じ値を持ちます。静的内部クラスは、親クラスのすべてのインスタンスに対して有効です。

しかし、staticトップレベルのクラスは「含まれているインスタンスから独立している」のでしょうか。トップレベルクラスのインスタンスは含まれていません。それができない理由です(または、あなたの視点によってstaticは常にそうですが、どちらの方法でも、指定する必要はありません)。static

実装に関しては、非static内部クラスには、含まれている外部クラスへの参照が含まれています。明らかに、この違いはトップレベルのクラスでも不可能です。

于 2013-02-09T09:31:55.710 に答える
1

意味がないからです。「静的」は、ネストされたクラスに適用される場合に意味があります。外側のクラスでは意味がありません。したがって、指定することはできません。

于 2013-02-09T09:20:25.673 に答える
0

AFAIK、トップレベルクラスを静的クラスとして宣言できる場合は、使用していないときでも常にヒープメモリに参照を保持します。これがメモリリークと呼ばれるものです。そのため、そうするように制限されています。

于 2013-02-09T08:41:41.147 に答える