7

次のコードを検討してください

class A {
    static class B{
        int a = 0;
    }
    public static void main(String argc[]) {
        B var1 = new B();
        B var2 = new B();
        var1.a = 5;
        var2.a = 6;
        System.out.println(var1.a+" and "+var2.a);
    }
}

5 と 6 を出力します。静的メンバーは 1 回だけロードされます。しかし、出力はそのステートメントと矛盾します。したがって、確かに静的クラスの概念は静的データ メンバーとは異なります。静的クラスの場合、静的とはどういう意味ですか

4

3 に答える 3

11

オラクルからのコピーペースト:

静的にネストされたクラス

クラスメソッドおよび変数と同様に、静的にネストされたクラスはその外部クラスに関連付けられます。また、静的クラスのメソッドと同様に、静的にネストされたクラスは、インスタンス変数またはそれを囲むクラスで定義されたメソッドを直接参照することはできません。オブジェクト参照を介してのみ使用できます。

注:静的にネストされたクラスは、他の最上位クラスと同じように、その外部クラス(および他のクラス)のインスタンスメンバーと対話します。事実上、静的にネストされたクラスは、動作上、パッケージ化の便宜のために別のトップレベルクラスにネストされたトップレベルクラスです。 静的にネストされたクラスには、囲んでいるクラス名を使用してアクセスします。

OuterClass.StaticNestedClass

たとえば、静的にネストされたクラスのオブジェクトを作成するには、次の構文を使用します。

OuterClass.StaticNestedClass nestedObject =
     new OuterClass.StaticNestedClass();

例:

LinkedList.EntryまたはMap.Entryは、LinkedList(別名Map)でのみ使用されるため、最上位クラスである必要はありません。また、外部クラスのメンバーにアクセスする必要がないため、静的であることが理にかなっています。これは、はるかにクリーンなアプローチです。

于 2012-11-04T20:29:03.437 に答える
3

あなたはその概念を誤解しました。属性Bを持つ静的クラスです。int aコードでは、クラスの2つのインスタンスを作成しており、各インスタンスには、それぞれ値5と6Bの独自の属性があります。a静的クラスをクラスの静的属性/メソッドと混同しないでください。

クラスの属性にstatic修飾子を追加すると、取得しようとしている動作を実行できます。それ以外の場合、コードは次のようになります。aB

class B{
    int a = 0;
}

class A {
    public static void main(String argc[]) {
        B var1 = new B();
        B var2 = new B();
        var1.a = 5;
        var2.a = 6;
        System.out.println(var1.a+" and "+var2.a);
    }
}
于 2012-11-04T20:28:15.490 に答える
3

クラスの場合、静的とは、それらが外部クラスのインスタンスに関連していないことを意味します。

class A{
  class B{
    ...
  }
}
...
new A.B(); //error

無効です。B は静的ではないため、A のインスタンスへの暗黙的な参照を保持します。つまり、A のインスタンスなしで B のインスタンスを作成することはできません。

class A{
  static class B{
    ...
  }
}
...
new A.B();

完全に有効です。B は静的であるため、A への参照を保持せず、A のインスタンスが存在しなくても作成できます。

静的クラスは、それを囲むクラスへの暗黙的な参照を保持しないクラスです。静的クラスは、名前空間が別のクラス内にあることを除いて、通常のクラスと同じように動作します。

非静的内部クラスは、それを囲むクラスへの暗黙的な参照を保持します。外側のクラスの変数は、内部クラスのインスタンスから直接アクセスできます。外部クラスの 1 つのインスタンスは、その内部クラスの複数のインスタンスを持つことができます。

于 2012-11-04T20:44:51.223 に答える