10

static クラスに static と宣言されていないメソッドが含まれているコードを見つけました。コンパイラは警告を表示しません。ややこしいですね。

4

6 に答える 6

12

Javaには静的クラスの概念はありません(静的内部クラスでさえありません)。クラスが静的であり、動作状態にある場合は、静的として宣言されている内部クラス (ネストされたクラスとも呼ばれます) である必要があります。また、静的内部クラスに静的メソッドのみを含めるという制限はありません。

内部クラスを静的に宣言することの重要性は、ネストされているクラスとは無関係に、ネストされたクラスのインスタンスを作成できるようにすることです。static が言及されていない場合、ネストされたクラスのすべてのインスタンスは、ネストされているクラスのインスタンスに関連付けられます。

この質問には詳細があります。 Java 内部クラスと static ネストされたクラス

于 2012-09-11T08:31:32.277 に答える
4

静的クラスは、外部クラスへの暗黙の参照を持たないネストされたクラスです。静的クラスは、静的メソッドまたはインスタンスメソッドを持つことができます。注:内部クラスに静的メソッドを含めることはできません。

于 2012-09-11T08:33:49.300 に答える
2

Javaには「静的クラス」のようなものはありません(少なくとも、あなたがそれを理解しているように見える方法では)。C#には、インスタンス化できず、非静的メンバーを持つことができない「静的クラス」があります。その概念はJavaには明示的に存在しません(ただし、すべてのコンストラクターを作成することで同じ効果を得ることができますprivate)。

表示されているのは、おそらく次のような静的なネストされたクラスです。

class Foo {
  static class Bar {
  }
}

これは、インスタンス に外部インスタンスへの参照がないことを意味するだけです(修飾子がない場合のように)。BarFooBarstatic

Barそれがトップレベルのクラスである場合、それが持つことができるあらゆる種類のメンバーを持つことができます。

于 2012-09-11T08:32:42.837 に答える
2

宣言できるのは内部クラスのみstaticです。静的クラスには外部クラスへのポインターがないため、外部クラスの静的フィールドとメソッドのみを参照できます。ただし、静的クラス自体に非静的メソッドが含まれる場合があります。

于 2012-09-11T08:31:24.770 に答える
0

キーワードは、static属性/メソッドとクラスでまったく異なります。

属性とメソッドの場合、クラスの生きているインスタンスなしで参照できる属性またはメソッドのインスタンスを 1 つだけ持つようにコンパイラに指示します。

static class内部クラスにのみ使用でき、囲んでいるクラスの既存のインスタンスなしでクラスを参照できることを示します。したがって、外部からアクセスする必要がある内部列挙に役立ちます。

しかし、 astatic classは、それ自体の本体から、必要なものを参照できます。

于 2012-09-11T08:35:16.437 に答える