3

对于专家来说是一个非常简单的问题,但对于像我这样的初学者来说,这只是令人困惑。我以为我了解静态,但显然我不了解。下面是整个类,它说我需要将测试设为静态。但我不想。我能做些什么来解决这个问题,为什么它首先会发生?谢谢!

public class SubstringTest
{
    private String test;

    public static void main(String[] args)
    {
        test = "Penguin";
        System.out.println(test);
        System.out.println(test.substring(3));

    }

}
4

3 回答 3

9

main是静态的。test不是。

如果您不想制作静态,则必须先test创建一个实例SubstringTest

SubstringTest st = new SubstringTest(); // create an instance
st.test = "test"; // this works
System.out.println(st.test); // also works

如果test是静态的,你可以这样做

SubstringTest.test = "test";

或者,如果您正在编写的代码在类中SubstringTest 并且 test是静态的:

test = "test";
于 2013-02-22T02:55:21.037 回答
5

静态方法不能访问非静态/实例变量,因为静态方法永远不会与任何实例相关联。静态方法不能直接调用非静态变量。但是静态方法可以通过声明实例并使用它们来访问非静态变量。

public class SubstringTest
{
private String test; // make it private static String test;

public static void main(String[] args)
{   // SubstringTest t = new SubstringTest(); Or change here.
    // t.test ="Penguin";
    test = "Penguin";
    System.out.println(test);
    System.out.println(test.substring(3));

}

}
于 2013-02-22T02:55:12.550 回答
4

不能从静态方法访问实例变量。

因为静态方法是在类实例上调用的,而不是在类的对象上调用的。这意味着,静态方法无法访问实例变量,因为它们仅在对象中实例化

于 2013-02-22T02:56:51.147 回答