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
等于40

a
是静态的,也称为“类变量”,
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。顺便说一句,你听说过一个叫做调试器的很棒的工具吗?谢谢,我现在知道了。