Java 为什么println()会打印这个?

Java 为什么println()会打印这个?,java,intellij-idea,static,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) {

打印出以下代码:

-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;
    }
}
如果我移除
点栏=新点(11,44,54);
输出为:

-7
-7
-11 -44 -54
11

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

因为
x
静态的
:只有一个
x
实例对于类
点的所有实例都是“共享的”。这就是该值被覆盖的原因。实际上,
x
与任何对象都没有关联,而是与类本身关联。请注意,变量
y
不是这种情况,它是一个实例变量

因此,在以下代码中:

Point foo = new Point(-11,-44,-54);
Point bar = new Point(11,44,54);

x
设置为
-11
,然后设置为
11
,因为
x
静态的
:对于类
点的所有实例
,只有一个
x
实例是“共享的”。这就是该值被覆盖的原因。实际上,
x
与任何对象都没有关联,而是与类本身关联。请注意,变量
y
不是这种情况,它是一个实例变量

因此,在以下代码中:

Point foo = new Point(-11,-44,-54);
Point bar = new Point(11,44,54);

x
设置为
-11
然后设置为
11

我还不明白。为什么打印出foo的整数会显示bar的整数?@AppTime没有
foo
的整数或
bar
的整数。整数
x
Point
类型的所有对象之间“共享”。这就是该值被覆盖的原因。这是因为
x
是静态的,与
y
不同。这也是
i
的解释,即
点.i
在ctor中被赋值
This.i=i
覆盖。不幸的是,该语言允许通过实例访问静态字段。体面的编译器对此发出警告。我还不明白。为什么打印出foo的整数会显示bar的整数?@AppTime没有
foo
的整数或
bar
的整数。整数
x
Point
类型的所有对象之间“共享”。这就是该值被覆盖的原因。这是因为
x
是静态的,与
y
不同。这也是
i
的解释,即
点.i
在ctor中被赋值
This.i=i
覆盖。不幸的是,该语言允许通过实例访问静态字段。体面的编译器对此发出警告。