Java中的静态变量问题
我需要对以下代码的输出进行解释:Java中的静态变量问题,java,variables,static,single-instance,Java,Variables,Static,Single Instance,我需要对以下代码的输出进行解释: class Stats { static int a = 10; int b = 20; void printMe() { System.out.println(a+b); } } public class Static { public static void main(String args[]) { Stats s1 = new Stats(); St
class Stats
{
static int a = 10;
int b = 20;
void printMe()
{
System.out.println(a+b);
}
}
public class Static
{
public static void main(String args[])
{
Stats s1 = new Stats();
Stats s2 = new Stats();
s1.b = 30;
s1.printMe();
s1.a = 20;
s2.printMe();
}
}
输出:
40
四十
我希望它是40和50,因为静态变量“a”应该只有一个副本,通过引用“s1”修改为20。
a
是静态的,也称为“类变量”,
a
的值在Stats
的所有实例中都相等
所以在第一次通话中:
对于s1,a
等于10,b
等于30,
所以a+b等于40
在第二次通话中:
对于s2,a
等于20,b
等于20,
因此
a+b
等于40a
是静态的,也称为“类变量”,
a
的值在Stats
的所有实例中都相等
所以在第一次通话中:
对于s1,a
等于10,b
等于30,
所以a+b等于40
在第二次通话中:
对于s2,a
等于20,b
等于20,
所以
a+b
等于40静态意味着影响整个班级。只有一个Stats.a
和一个Stats.b
。因此,按类名而不是实例名引用静态变量是一种很好的做法。您可能需要的是最终变量。@gangqinlaohu如果使用Stats,我得到40和50作为输出,但我认为静态变量应该只有一个副本。因此,即使我使用对象引用修改它,也必须修改单个副本?第一个(s1)是30+10,第二个(s2)是20+20。顺便说一句,你听说过一个叫做调试器的很棒的工具吗?谢谢,我现在知道了。静态意味着影响整个类。只有一个Stats.a
和一个Stats.b
。因此,按类名而不是实例名引用静态变量是一种很好的做法。您可能需要的是最终变量。@gangqinlaohu如果使用Stats,我得到40和50作为输出,但我认为静态变量应该只有一个副本。因此,即使我使用对象引用修改它,也必须修改单个副本?第一个(s1)是30+10,第二个(s2)是20+20。顺便说一句,你听说过一个叫做调试器的很棒的工具吗?谢谢,我现在知道了。