私はJavaを初めて使用します。言語仕様を調べていたときに、静的クラスを宣言できないことがわかりましたが、静的内部クラスを持つことはできます。なぜトップレベルの静的クラスを持つことができないのか、私は少し混乱しています。ユーティリティメソッドのみを含むクラスを作成したい場合は、静的クラスに進むことができます。Javaの開発者がこの機能を制限した理由は何ですか?
5 に答える
トップレベルクラスは、定義上、すでにトップレベルであるため、静的と宣言しても意味がありません。そうすることはエラーです。
これは制限ではありません。ユーティリティクラスを定義する必要はありませんstatic class
。必要なのは。だけですstatic methods
。たとえばMath
、Javaのクラスは静的メソッドでいっぱいですが、クラス自体は静的ではありません。
inner class
静的クラスが必要になるのは、Javaで許可されている、囲んでいるクラスのインスタンスを作成せずに使用するを定義する場合のみです。
ユーティリティクラスは次のように定義できます。
class Util {
public static void method(){
// your utility method
}
}
static
は相対的な用語です。
static
「含まれているインスタンスから独立している」という意味です。したがって、静的フィールドは、クラスのインスタンスに関係なく、同じ値を持ちます。静的内部クラスは、親クラスのすべてのインスタンスに対して有効です。
しかし、static
トップレベルのクラスは「含まれているインスタンスから独立している」のでしょうか。トップレベルクラスのインスタンスは含まれていません。それができない理由です(または、あなたの視点によってstatic
は常にそうですが、どちらの方法でも、指定する必要はありません)。static
実装に関しては、非static
内部クラスには、含まれている外部クラスへの参照が含まれています。明らかに、この違いはトップレベルのクラスでも不可能です。
意味がないからです。「静的」は、ネストされたクラスに適用される場合に意味があります。外側のクラスでは意味がありません。したがって、指定することはできません。
AFAIK、トップレベルクラスを静的クラスとして宣言できる場合は、使用していないときでも常にヒープメモリに参照を保持します。これがメモリリークと呼ばれるものです。そのため、そうするように制限されています。