想知道 - 为什么在编译期间会出现这样的错误消息:
ClassHierarchyTest1.this无法从静态上下文引用
源代码:
public class ClassHierarchyTest1 {
class Foo {
int a;
Foo(int b) {
this.a = b;
}
}
public static void main(String[] args) {
Foo f = new Foo(1); // this line has the error message
}
}
答案 0 :(得分:1)
一点都不奇怪。
你的内心本身并不是一成不变的。因此,它总是需要外部封闭类的对象。您在静态主体中没有的东西。
所以你必须改变Foo是静态的(当然你不能使用"外部这个"),或者你必须首先创建一个外部类的实例,然后调用这个对象的新内容。
答案 1 :(得分:1)
Foo
是一个内部类,因此您只能通过ClassHierarchyTest1
的实例访问它。像那样:
Foo f = new ClassHierarchyTest1().new Foo(1);
另一种选择是将foo
定义为静态:
static class Foo{...}
答案 2 :(得分:1)
Foo是ClassHierarchyTest1
的成员。因此,您必须使用ClassHierarchyTest1
才能访问其成员。
InnerClass的实例只能存在于OuterClass的实例中,并且可以直接访问其封闭实例的方法和字段。
class OuterClass {
...
class InnerClass {
...
}
}
要实例化内部类,必须首先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
答案 3 :(得分:0)
向您的班级添加静态
public class ClassHierarchyTest1 {
class static Foo {
int a;
Foo(int b) {
this.a = b;
}
}
public static void main(String[] args) {
Foo f = new Foo(1); // this line has the error message
}
}