在java中创建内部类对象的问题

这是代码。

public class Test { class InnerClass{ } public static void main(String[] args){ InnerClass ic = new InnerClass(); } } 

它说错误信息

 non-static variable this cannot be referenced from a static context after creation of object ic. 

任何人都可以给我理由吗?

谢谢

InnerClass本身需要是static ,即

 public class Test { static class InnerClass{ } public static void main(String[] args){ InnerClass ic = new InnerClass(); } } 

如果InnerClass 不是 static ,则只能在Test的父实例的上下文中实例化。 相当巴洛克式的语法是:

 public class Test { class InnerClass{ } public static void main(String[] args){ Test test = new Test(); InnerClass ic = test.new InnerClass(); } } 

您的内部类依赖于Test类的实例。 main是一个静态方法,因此无法创建InnerClass的实例。

我想你想把你的内部类声明为static

 class Test { static class InnerClass { } public static void main(String[] args){ InnerClass ic = new InnerClass(); } } 

有关嵌套类的更多信息: http : //download.oracle.com/javase/tutorial/java/javaOO/nested.html

简短的解释

主要有两种类型的嵌套类:“静态嵌套类”和“内部类”

静态嵌套类用于逻辑分组两个类,可用于增加封装。 它们可以像任何其他类一样使用,除了可见性之外,它们对外部类字段没有任何特定的访问权限。 它们可以在逻辑上在静态上下文中实例化。

内部类(即非静态绑定到外部类的特定实例 。 这意味着您必须具有外部类的实例来实例化内部类。 看一下Skaffman第二个代码块,用于实例化示例。 由于内部类绑定到外部类的实例,因此它们可以访问相对于此特定实例的每个字段。

我希望现在所有这一切都更加清晰。

首先,“嵌套”类是静态的,而“内部”类则不是。

静态类在封闭类的所有实例之间共享(因此静态字段在所有实例之间共享),而每个实例都有自己的非静态内部类的版本。
非静态内部类与封闭对象(而不是类)一起存储,并且只能通过实例访问。