奇怪无法从Java中的静态上下文错误中引用

时间:2017-04-02 04:48:11

标签: java

想知道 - 为什么在编译期间会出现这样的错误消息:

  

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
    }
}

4 个答案:

答案 0 :(得分:1)

一点都不奇怪。

你的内心本身并不是一成不变的。因此,它总是需要外部封闭类的对象。您在静态主体中没有的东西。

所以你必须改变Foo是静态的(当然你不能使用"外部这个"),或者你必须首先创建一个外部类的实例,然后调用这个对象的新内容。

答案 1 :(得分:1)

Foo是一个内部类,因此您只能通过ClassHierarchyTest1的实例访问它。像那样:

 Foo f = new ClassHierarchyTest1().new Foo(1);

另一种选择是将foo定义为静态:

static class Foo{...}

答案 2 :(得分:1)

Foo是ClassHierarchyTest1的成员。因此,您必须使用ClassHierarchyTest1才能访问其成员。

Inner Classes的文档

  

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
}
}