为什么println()会打印出来?

时间:2015-02-14 17:20:59

标签: java intellij-idea static

以下代码打印出来:

-7
-7
11 44 -54
11

我认为应该打印出来:

-7
-7
-11 -44 -54
11

代码是:

import static java.lang.System.out;

public class Point {
    public static int x = 0;
    public int y = 0;
    public static int i = 7;
    public static void main(String[] args) {
        if (true) Point.x = -7;
        out.println(x);
        out.println(Point.x);
        Point foo = new Point(-11,-44,-54);
        Point bar = new Point(11,44,54);
            out.println(foo.x + " " + foo.i + " " + foo.y);
        out.println(Point.x);
    }

    //constructor
    public Point(int x, int i, int y) {
        this.y = y;
        this.i = i;
        this.x = x;
    }
}

如果我删除Point bar = new Point(11,44,54); ,则输出为:

-7
-7
-11 -44 -54
11

如果这是相关的:要运行此程序(在Point.java内)我(像往常一样)按Shift + Ctrl + F9和Ctrl + F9和Shift + F10。我在Win 8.1 64位上运行IntelliJ Idea 14.0.3和JDK 7u76并安装了所有更新。

1 个答案:

答案 0 :(得分:4)

由于xstaticx只有一个Point个实例,对于类x的所有实例都是“共享”的。这就是为什么价值被覆盖的原因。实际上,y与任何对象都没有关联,而是与类本身关联。请注意,变量Point foo = new Point(-11,-44,-54); Point bar = new Point(11,44,54); 不是这种情况,它是实例变量

所以在下面的代码中:

x

-11设置为11,然后设置为{{1}}。