16

class が のように宣言されているのを見たことがstaticありjavaますが、混乱しています:
class はオブジェクトの作成に使用され、オブジェクトごとに異なるメモリ割り当てがあるためです。では、クラスを宣言するときに
何に使用されますか?それはすべてという意味ですか? これは理にかなっていますか?"static"member variablesstatic

4

3 に答える 3

30

まず、最上位クラスを静的にすることはできません。ネストされたクラスを静的にすることしかできません。ネストされたクラスを静的にすることにより、基本的に、ネストされたクラスのインスタンスを外部クラス/トップレベルクラスから使用する必要がないことを言っています。

例:

class Outer {

static class nestedStaticClass {

//its member variables and methods (don't nessarily need to be static)
//but cannot access members of the enclosing class
}

public void OuterMethod(){
//can access members of nestedStaticClass w/o an instance
}
}

また、定数 (つまり、 ) でない限り、内部クラス内で static フィールドを宣言することは違法static finalです。ネストされた静的クラスは内部クラスではないため、ここで静的メンバーを宣言できます。

ネストされたクラスにクラスをネストできますか?

一言で言えば、そうです。以下を見てください。Testネストされた内部クラスとネストされた静的クラスの両方が、ネストされたクラスを持つことができます。ただし、静的クラスは最上位クラス内でのみ宣言できることに注意してください。内部クラス内で宣言することは違法です。

public class Test {
    public class Inner1 {
        public class Inner2 {
            public class Inner3 {

            }
        }
    }
    public static class nested1 {
        public static class nested2 {
            public static class nested3 {

            }
        }   
    }
}
于 2013-03-16T10:53:38.683 に答える
6

ネストされたクラス (クラス内のクラス) は、静的に宣言できる唯一のクラスです。これは、ネストされたクラスにアクセスするために親クラスをインスタンス化する必要がないようにするためです。

この回答にはいくつかの良いサンプルコードがあります

于 2013-03-16T10:54:13.733 に答える
2

このクラスとそれを含むクラスとの関係を説明するだけです。

内部クラスは、別のクラスのスコープ内で定義されたクラスです。内部クラスのインスタンスは、コンテナー クラスの特定のインスタンス (それらが作成されたインスタンス) にアタッチされます。

ネストされた静的クラスはネストされたクラスですが、静的に定義されています。静的メンバーと同様に、特定のインスタンスとは関係ありません。含まれているクラスに属しているだけです。ネストされたクラスでは、それらに関連付けられた特定のインスタンスがないため、含まれているクラスの非静的メンバー/メソッドを参照することはできません。

于 2013-03-16T10:58:28.503 に答える