次のコードがあります:
class Hello {
class Thing {
public int size;
Thing() {
size = 0;
}
}
public static void main(String[] args) {
Thing thing1 = new Thing();
System.out.println("Hello, World!");
}
}
何もしないことはわかっていますThing
が、Hello, World プログラムはこれなしでも問題なくコンパイルされます。失敗するのは定義したクラスだけです。
No enclosing instance of type Hello is accessible."
そして、コンパイルが拒否されます。新しい Thing を作成する行に到達します。次のいずれかだと思います:
- システムレベルの問題(DrJavaまたはJavaインストールのいずれか)があるか、
- Java で動作するプログラムを構築する方法について、基本的な誤解があります。
何か案は?
ベストアンサー1
static class Thing
プログラムが動作するようになります。
現状では、Thing
内部クラスとして、(定義により) の特定のインスタンスに関連付けられていますHello
(使用または参照されていない場合でも)。つまり、スコープ内にnew Thing();
特定のインスタンスがないと、エラーになりますHello
。
代わりに静的クラスとして宣言すると、それは「ネストされた」クラスとなり、特定のHello
インスタンスは必要ありません。