JAVA“非静态变量,不能从静态上下文引用”

时间:2017-09-24 10:48:27

标签: java static

我来自C ++并从Java开始。所以我知道我不能使用super和静态函数,但代码有什么问题?

class TestClass {

    public static void main(String[] args) {
        Test x = new Test(); // Here is the error Why? 
    }

    class Test {
        //attributes 
        String attribute;
    }
}

谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

Test类是TestClass类的内部类。因此,为了创建Test类的对象,您必须创建一个封闭的TestClass类的对象。

您可以将Test课程移到TestClass以外的地方来修复此错误:

class Test {
    //attributes 
    String attribute;
}

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

或使其成为嵌套(静态)类(不需要封闭实例):

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

    static class Test {
        //attributes 
        String attribute;
    }
}

如果你坚持让Test成为内部类,你可以写:

class TestClass { 
    public static void main(String[] args) {
        TestClass.Test x = new TestClass().new Test(); 
    }  

    class Test {
        //attributes 
        String attribute;
    }
}

答案 1 :(得分:0)

因为Test是非静态类并且试图从静态上下文(即从main()方法(静态)访问它),这意味着您需要创建{{1的实例/对象首先是类。

TestClass

应该是

Test x = new Test();

或将TestClass.Test x = new TestClass().new Test(); 声明为静态。

Test