我是Java的新手,并试图自己学习。我写了下面的代码,我想知道为什么输出不像我期望的那样。以下是我写的代码:
public class Roughwork {
public static int classVar = 25;
public void getValue(int a){
classVar = a;
System.out.println(classVar);
}
public static void main(String[] args) {
Roughwork test = new Roughwork();
System.out.println(classVar);
test.getValue(30);
System.out.println(classVar);
}
}
并且该程序的输出是:
25
30
30
我预计输出为
25
30
25
到底发生了什么以及我需要做些什么才能获得预期的输出?
答案 0 :(得分:3)
ClassVar声明为static。
public static int classVar = 25;
这意味着它与Roughwork
的实例无关。如果你愿意的话,它是一个全局变量。您甚至可以从应用程序中的其他类调用此变量,如下所示:
Roughwork.classVar
要获得预期的行为,请将代码更改为:
public class Roughwork {
public int classVar = 25;
public void getValue(int a){
classVar = a;
System.out.println(classVar);
}
public static void main(String[] args) {
Roughwork test = new Roughwork();
System.out.println(test.classVar);
test.getValue(30);
Roughwork test2 = new Roughwork();
System.out.println(test2.classVar);
}
}
答案 1 :(得分:0)
这是因为您将其更改为30并且不会将其更改回25.(static
表示所有类的实例都相同)
System.out.println(classVar); //25
test.getValue(30); //30
System.out.println(classVar); //30 - you don't change variable back to 25
要解决此问题,请在classVar = 25
之后添加test.getValue
,或在static
定义中删除classVar
修饰符。
答案 2 :(得分:0)
静态变量由类的所有实例共享。在实例变量的情况下,每个类的实例都有不同的副本。
静态变量内存在编译时分配,它们在加载时加载并在类初始化时初始化,如果是实例变量,则一切都在运行时完成。
让这个例子变得有趣: 创建Roughwork的新实例,尝试更改值并尝试一下。
Roughwork test = new Roughwork();
Roughwork test2 = new Roughwork();
System.out.println(classVar);
test.getValue(30);
test2.getValue(25);
System.out.println(classVar);
引用此主题以便清楚地理解:Class Variable & Instance Variable