4

Javaの静的内部クラスについて勉強しています。しかし、静的内部クラスまたは内部クラスを使用するポイントが明確ではありません。

class A{

    static class B{

    }

    public static void main(String[] args) {

        B b=new B();

    }

}

また

class B{}
class A{
    public static void main(String[] args) {

        B b=new B();

    }

}
4

5 に答える 5

11

非静的内部クラスには、それを囲むクラスへの自動参照があります。外側のクラスとの静的な内部クラスのみの関係は、外側のクラスの名前を介して参照する必要があることですEnclosingClass.StaticInnerClass

非静的内部クラスは、親クラスから一部のデータを参照する場合に適しています。

静的な内部クラスは、内部クラスを取り囲むクラスに関連付けたいだけで、ドラッグする必要がない場合に適しています。

言い換えれば、非静的内部クラスは、その参照を持っているため、囲んでいるクラスがガベージ コレクションされるのを防ぐことができますが、静的内部クラスは決してそうしません。

于 2013-05-13T14:33:03.603 に答える
2

技術的な違いがあります:

class A {
    private static int x = 42;  //the answer
    public static class B {
        int showX() {
            return x; // only static class can it
        }
    } 

}

しかし、それは主なポイントではありません。クラスBがクラスによってのみ使用される場合A、1 つのパッケージ内のいくつかのクラスが同じ名前のユーティリティ クラスを持ちたい場合があるため、クラスを内部にすることをお勧めします。

于 2013-05-13T14:23:47.960 に答える
0

結果は同じですが、B が A が使用する小さなクラスである場合は、それを A に入れる方が理にかなっています。

于 2013-05-13T14:23:05.133 に答える
0

入れ子になったクラスを静的にできるようにすることで、外側のクラスのインスタンスを持たずに入れ子になったクラスを使用できます。

ネストされたクラスは、それを囲むクラスのメンバーです。ネストされた非静的クラス (内部クラス) は、プライベートと宣言されている場合でも、囲んでいるクラスの他のメンバーにアクセスできます。入れ子になった静的クラスは、囲んでいるクラスの他のメンバーにアクセスできません。...

注: 入れ子になった静的クラスは、他の最上位クラスと同様に、その外側のクラス (および他のクラス) のインスタンス メンバーと対話します。実際には、入れ子になった静的クラスは、パッケージングの便宜のために別のトップレベル クラスに入れ子になったトップレベル クラスの動作です。

チュートリアルはこちら

于 2013-05-13T14:27:20.653 に答える
0

内部クラスが「オブジェクト」の一部と見なされる場合は、内部クラスを使用します。実際、ラッピング クラスからプライベート、パッケージ、保護、およびパブリック フィールドにアクセスできます。

「欠点」は次のとおりです。内部クラスは、インスタンス化されたラッピングクラスなしでは存在できません。これは、論理的には最初の文によるものです。

それ以外の場合は、次のことを考慮してください。

  • ネストされた(静的内部とも呼ばれる)クラスの動作は、具体的すぎる可能性があるため、外部クラスによって再利用可能とは見なされません。
  • 1 つのクラスのいくつかの関連フィールドは非常に関連しているため、それらをラップするクラスを作成する必要があります。これにより、コードがより理解しやすくクリーンになります。

次に、静的クラスを作成することを選択します。

さらに、static(オブジェクトのライフサイクル外を意味する)ため、ネストされたクラスは、そのラッピングクラス/オブジェクトに関係なくインスタンス化される場合があります。

于 2013-05-13T14:25:21.723 に答える