(16)Javaにおける静的および非静的ネストされたクラスの違い1)ネストされた静的クラスは、Outerクラスの参照を必要としないが、静的でないネストされたクラスまたはInnerクラスは、Outerクラス参照を必要とする。Outerクラスのインスタンスを作成せずにInnerクラスのインスタンスを作成することはできません。これは、ネストされたクラスを静的または非静的にする際に考慮すべき最も重要なことです。2)静的クラスは実際にはクラスの静的メンバーであり、静的コンテキストや静的メソッド、Outerクラスの静的ブロックなどで使用できます。3)静的ネストされたクラスと非静的なネストされたクラスの別の違いは、ネストされた静的クラスに直接メソッドやフィールドなどの非静的メンバーにアクセスできないことです。"静的ではないメンバーは静的コンテキストでは使用できません"のようなエラーが出ます。JAVAこれはJavaの静的ネストクラスと非静的ネストクラスの違いです。Innerクラスなど)では他の2つのタイプについては説明しませんでした。このJavaチュートリアルでは、Javaでネストされた静的クラスとは何か、およびJavaでネストされた静的クラスと非静的クラスの両方のインスタンスを作成する方法を見てきました。要約すると、Outerクラスのインスタンスを必要としないため、ネストされた静的クラスのインスタンスを簡単に作成できます。非静的なネストされたクラス(たとえば、Innerクラス)は常にOuterクラスインスタンスを必要とし、Outerクラスなしでは存在できません。静的クラスと静的クラスのどちらかを選択する必要がある場合は、それを使用できる場合は静的ネストされたクラスよりも優先します。設計/実装はこれらの1つを選択する際に役割を果たしますか?Javaチュートリアルから:ネストされたクラスは、静的と非静的の2つのカテゴリに分類されます。静的と宣言されたネストされたクラスは、単に静的なネストされたクラスと呼ばれます。静的でないネストされたクラスは、内部クラスと呼ばれます。静的なネストされたクラスは、囲むクラス名を使用してアクセスされます。OuterClass.StaticNestedClassたとえば、静的ネストされたクラスのオブジェクトを作成するには、次の構文を使用します。OuterClass.StaticNestedClass();内部クラスのインスタンスであるオブジェクトは、外部クラスのインスタンス内に存在します。}}InnerClassのインスタンスは、OuterClassのインスタンス内にのみ存在し、囲むインスタンスのメソッドとフィールドに直接アクセスできます。内部クラスをインスタンス化するには、まず外部クラスをインスタンス化する必要があります。次に、次の構文を使用して外側オブジェクト内の内側オブジェクトを作成します。ネストされたクラス完全性のために、内包クラスのインスタンスを持たないクラスもあります。}は静的コンテキストで定義された内部クラスであり、囲むインスタンスはありません。Javaやネストされたクラスの初心者である学習者を対象とするネストされたクラスは、次のいずれかになります。1.静的ネストされたクラス。2.非静的ネストされたクラス。here...*/}内部クラスは、ネストされたクラスのサブセットです。内部クラスはネストされたクラスの特定の型です内部クラスはネストされたクラスのサブセットですあなたは、と言うことができるインナークラスは、ネストしたクラスですが、できないで、ネストされたクラスはまた、内部クラスであることを言います。"プライベート"とマークされたメンバにもアクセスできます。}}静的クラスの専門分野:静的内部クラスは、外部クラスの静的メンバーにのみアクセスでき、非静的メンバーにはアクセスできません。Javaの内部クラスと静的入れ子クラスの主な違いは何ですか?答え:上記の各クラスの詳細を参照してください。Javaの内部クラスとネストされた静的クラスはどちらも、Javaのトップレベルクラスと呼ばれる別のクラスの内部で宣言されたクラスです。Javaの用語では、ネストされたクラスを静的宣言すると、Javaではネストされた静的クラスと呼ばれ、静的でないネストされたクラスは単にインナークラスと呼ばれます。Javaの内部クラスとは何ですか?最上位ではない、または他のクラスの中で宣言されているクラスは、ネストされたクラスとして知られており、それらのネストされたクラスのうち、非静的と宣言されたクラスはJavaのInnerクラスとして知られています。Javaには3種類のInnerクラスがあります。コードブロックまたはメソッドの中で宣言される。参照する名前を持たず、作成される同じ場所で初期化されるクラスです。外部クラスの非スタティックメンバとして宣言されます。}}Javaのネストされた静的クラスとは何ですか?ネストされた静的クラスは、クラスの内部でメンバーとして宣言され、静的にされた別のクラスです。ネストされた静的クラスも外部クラスのメンバーとして宣言され、他のメンバーと同様にプライベート、パブリック、または保護されます。内部クラスにネストされた静的クラスの主な利点の1つは、ネストされた静的クラスのインスタンスが、Outerクラスの包囲するインスタンスに接続されていないことです。Javaでネストされた静的クラスのインスタンスを作成するために、Outerクラスのインスタンスは必要ありません。1)プライベートクラスを含む外部クラスの静的データメンバーにアクセスできます。2)静的なネストされたクラスは、非静的(インスタンス)データのメンバーまたはメソッドにアクセスできません。}}リファレンス:Javaの内部クラスとネストされた静的クラスここでは、Javaの内部クラスと静的な入れ子のクラスの主な違いと類似点を示します。それが役に立てば幸い!インナークラスインスタンスクラスと静的メソッドの両方の外部クラスにアクセスできます。新しいキーワードの場所を書き留めます)。これは、1つの場所でのみ使用されるクラスを論理的にグループ化する方法です。あるクラスが他の1つのクラスに有益な場合は、そのクラスに埋め込み、2つのクラスを一緒に保つことは論理的です。このような「ヘルパークラス」のネストは、パッケージをより合理化します。BがAのメンバーにアクセスする必要がある2つのトップレベルのクラスAとBを考えてみましょう。なければプライベートと宣言されます。クラスA内のクラスBを隠すことにより、Aのメンバーはプライベートであると宣言され、Bはそれらにアクセスすることができる。B自体を外部から隠すことができます。読みやすくメンテナンス可能なコードにつなげることができます。トップレベルのクラス内に小さなクラスを入れ子にすると、コードは使用されている場所の近くに配置されます。ここに追加することはあまりありませんが、答えのほとんどは静的ネストされたクラスとインナークラスの違いを完全に説明しています。ネストされたクラスと内部クラスを使用する場合は、次の点を考慮してください。いくつかの答えで言及しているように、内部クラスは、その囲むクラスなしでインスタンス化することはできません。GCが原因でメモリオーバーフローまたはスタックオーバーフローの例外につながる、その囲むクラスのインスタンスへのポインタを保持しますそれ以上使用されなくても、囲むクラスをガベージコレクションすることはできません。」と出しますが、これをコメントしておくことはできません。その理由は、白い内部インスタンスがまだ参照されているため、GCはそれを収集できません。外部インスタンスを参照する(ポインタを持つ)ため、収集されません。プロジェクトにこれらのオブジェクトが十分にあり、メモリが不足する可能性があります。インスタンスに関連するクラスではないので、内部クラスインスタンスにポイントを保持しない静的内部クラスと比較します。Outer.Inner();これらの用語は同じ意味で使用されています。"入れ子にされたクラス"を定義して、静的な内部クラスを参照することができます。コードでは、次のようなものがあります。{}}しかし、それは実際に広く受け入れられている定義ではありません。インスタンスを作成する場合、非静的な内部クラスのインスタンスは、それが定義されている外部クラスのオブジェクトの参照を使用して作成されます。これは、インスタンスを含むことを意味します。静的内部クラスのインスタンスは、外部クラスのオブジェクトの参照ではなく、Outerクラスの参照で作成されます。これはインスタンスを包含していないことを意味します。}}ネストされたクラス:クラス内部のクラスタイプ:静的ネストされたクラス非静的なネストされたクラス[内部クラス]差:非静的なネストされたクラス[内部クラス]静的でないネストされたクラスの内部クラスのオブジェクトは、外部クラスのオブジェクト内に存在します。外部クラスのデータメンバが内部クラスにアクセスできるようにします。したがって、内部クラスのオブジェクトを作成するには、まず外部クラスのオブジェクトを作成する必要があります。"静的"という単語はオブジェクトを作成する必要がないため、外部クラスのオブジェクトは必要ありません。outerclass.nestedclass.x);上記の答えでは、実際の違いが明らかになったとは思いません。最初に用語を正しく取得する:ネストされたクラスは、ソースコードレベルの別のクラスに含まれるクラスです。静的修飾子で宣言すると静的です。非静的なネストされたクラスはインナークラスと呼ばれます。(私は静的でない入れ子になったクラスに留まります。)今のところマーティンの答えは正しいです。静的なネストされたクラスを使用します。静的ネストされたクラスと他のすべてのクラスとの間に意味的な違いはありません。静的でないネストされたクラスは異なるビーストです。匿名の内部クラスと同様に、そのような入れ子クラスは実際にはクロージャです。周囲のスコープと囲むインスタンスをキャプチャしてアクセス可能にすることを意味します。その例がそれを明らかにするでしょう。}}この場合、子アイテムから親コンテナへの参照が必要です。静的でないネストされたクラスを使うと、これは何らかの作業をしなくても動作します。Container.thisという構文を使用して、Containerの囲むインスタンスにアクセスできます。以下のハードコアの説明:コンパイラが(静的でない)ネストされたクラスのために生成するJavaバイトコードを見ると、さらに明確になる可能性があります。this$0作成します。これは、Container型の追加パラメータを持つコンストラクタで設定され、囲むインスタンスを指定します。このパラメーターはソース内には表示されませんが、コンパイラーはネストされたクラスに対して暗黙的に生成します。InnerClass();バイトコードのようなものの呼び出しにコンパイルされるでしょう。静的でないネストされたクラスの完全な例です。名前が関連付けられておらず、後で参照することもできません。特定の状況で有用なネストされた静的クラスの使用についての微妙なことがあります。静的属性は、クラスがそのコンストラクタを介してインスタンス化される前にインスタンス化されますが、ネストされた静的クラスの内部の静的属性は、クラスのコンストラクタが呼び出されるまで、または少なくとも属性が最初に参照されるまで彼らは「最終的」とマークされます。この例を考えてみましょう。final'として宣言されています。nested.innerItemの設定は、クラスがインスタンス化されるまで(少なくともネストされた静的な項目が最初に参照されるまで)、私が参照している行をコメントしたりコメントを外したりすることでわかります。'outerItem'に当てはまりません。6.0で見ているものです。私が思うに、一般的に続いている大会はこれです:トップレベルクラス内の静的クラスはネストされたクラスですトップレベルクラス内の非静的クラスは、さらに2つのフォームを持つ内部クラスです。メソッドまたはコンストラクタ本体のようなブロックの内部で宣言されたクラス。覚えておくべき他の点はほとんどありません。トップレベルのクラスと静的なネストされたクラスは、静的なネストされたクラスの場合、その外部クラスのプライベートな静的フィールド/メソッドへの静的な参照を行うことができ、逆も同様です。内部クラスは、外部[親]クラスの囲むインスタンスのインスタンス変数にアクセスできます。すべての内部クラスが包含するインスタンスを持っているわけではありません。静的コンテキスト内の内部クラス(静的イニシャライザブロックで使用される匿名クラスなど)はそうではありません。匿名クラスは、デフォルトで親クラスを拡張したり、親インタフェースを実装したり、他のクラスを拡張したり、それ以上のインタフェースを実装したりする句はありません。それは主にあなたが扱っているシナリオに依存しますが、@jrudolphによって与えられた返信を読むことは、あなたが何らかの決定を下すのを助けるかもしれません。私は、上記の答えのいずれも、ネストされたクラスと静的なネストされたクラスの間の実際の違いをアプリケーション設計の点で説明してくれないと思います。オーバービューネストされたクラスは非静的でも静的でもよく、それぞれの場合に別のクラス内で定義されたクラスです。ネストされたクラスが他のクラス(囲むだけでなく)によって有益である場合、最上位クラスとして宣言する必要があります。包含するクラスの囲むインスタンスに暗黙的に関連付けられます。メソッドを呼び出して、囲むインスタンスの変数にアクセスすることができます。非静的なネストされたクラスの一般的な使用法の1つは、Adapterクラスを定義することです。:囲むクラスインスタンスにアクセスすることはできませんし、メソッドを呼び出すので、ネストされたクラスは、囲むクラスのインスタンスへのアクセスを必要としない場合に使用する必要があります。静的ネストされたクラスの一般的な使用は、外部オブジェクトのコンポーネントを実装することです。非静的なネストされたクラスはコンテナクラスのインスタンスにアクセスでき、静的なものはアクセスできないことです。簡単に言えば、Javaはクロージャを提供しないため、主にネストされたクラスが必要です。ネストされたクラスは、別のクラスを囲んでいる本体の内部で定義されたクラスです。静的と非静的の2種類です。publicの4つのアクセス指定子のいずれかを指定できます。私たちはこの贅沢をトップレベルのクラスでは持っていません。トップレベルのクラスはpublicに宣言されてpublicかパッケージプライベートにしか宣言されていません。インナークラス別名非スタッククラスは、プライベート宣言されていてもトップクラスの他のメンバーにアクセスできますが、スタティックネストされたクラスはトップクラスの他のメンバーにアクセスできません。Inner2は静的でない内部クラスです。Inner1オブジェクトを個別に作成できるように、OuterなしでInner2インスタンスを作成することはできません。Aのみに関連する状況を考えてみましょう。インナークラスが絵になります。内部クラスのインスタンスを作成するには、外部クラスのインスタンスを作成する必要があります。Inner2();静的なInnerクラスはいつ使用しますか?静的な内部クラスは、それが囲むクラス/トップクラスのインスタンスと何の関係もないことを知っているときに定義します。内部クラスが外部クラスのメソッドやフィールドを使用していない場合は、スペースを無駄にするだけなので静的にしてください。静的ネストされたクラスのオブジェクトを作成するには、次の構文を使用します。OuterClass.Inner1();静的ネストされたクラスの利点は、クラス/トップクラスを含むオブジェクトが動作する必要がないことです。これにより、実行時にアプリケーションが作成するオブジェクトの数を減らすことができます。最初に、静的クラスと呼ばれるクラスはありません。内部クラス(静的メンバーと呼ばれ、ネストされたクラスと呼ばれます)を使用する静的修飾子は、外部クラスの静的メンバーであることを示します。(これはもともとスタティックの利点です)。Nestedクラスと通常のInnerクラスの違いは次のとおりです。InnerClass();まず、Outerclassをインスタンス化してInnerにアクセスできます。Classがネストされている場合、構文は次のようになります。OuterClass.InnerClass();静的キーワードの通常の実装として静的構文を使用します。inner-classesHashMapとHashtableの違いは?Javaは「参照渡し」または「渡し渡し」ですか?serialVersionUIDとは何ですか、なぜそれを使用する必要がありますか?StringBuilderとStringBufferの違いJavaでネストされたループから抜け出す方法は?wait()とsleep()の違いJava:静的クラスと内部クラスJavaBeanとは何ですか?Javaでの静的クラスJavaクラスの標準名と単純名とクラス名の違いは何ですか?日本語Top。