对于专家来说这是一个非常简单的问题,但对于像我这样的初学者来说,这只是令人困惑。我以为我理解静态,但显然我没有。以下是整个课程,它说我需要进行静态测试。但我不想。我该怎么做才能解决这个问题,为什么它首先发生?谢谢!
public class SubstringTest
{
private String test;
public static void main(String[] args)
{
test = "Penguin";
System.out.println(test);
System.out.println(test.substring(3));
}
}
答案 0 :(得分: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";
答案 1 :(得分: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));
}
}
答案 2 :(得分:4)
您无法从静态方法访问实例变量。
因为在类实例上调用静态方法而不是类的对象。这意味着静态方法无法访问实例变量,因为它们仅在对象中实例化