你已经宣布了这门课Thing作为一个非静态的内部类。这意味着它必须与Hello班级,等级。
在您的代码中,您试图创建一个Thing从静态的上下文中。这正是编译器所抱怨的。
有几种可能的解决办法。使用哪种解决方案取决于您想要实现什么。移动Thing走出Hello班级,等级。
变化Thing成为static嵌套类static class Thing
创造实例的Hello在创建Thing.public static void main(String[] args){
Hello h = new Hello();
Thing thing1 = h.new Thing(); // hope this syntax is right, typing on the fly :P}
最后的解决方案(a非静态的任何实例时,嵌套类)都是强制性的。Thing依赖于Hello才有意义。例如,如果我们有:public class Hello {
public int enormous;
public Hello(int n) {
enormous = n;
}
public class Thing {
public int size;
public Thing(int m) {
if (m > enormous)
size = enormous;
else
size = m;
}
}
...}
创建类对象的任何原始尝试Thing,见:Thing t = new Thing(31);
会有问题,因为不会有明显的enormous值来测试31。实例h.的.Hello外部类是提供以下内容所必需的h.enormous价值:...Hello h = new Hello(30);...Thing t = h.new Thing(31);...
因为这并不意味着Thing如果它没有Hello.
有关嵌套/内部类的更多信息:嵌套类(Java教程)