当我运行这个程序时,它给了我以下输出。为什么我得到g.y为2而不是5.那么为什么我得到这个输出?我错过了什么。请解释一下。
public class G {
public int x = 3;
public static int y = 7;
public static void main(String[] args) {
G g = new G();
G h = new G();
g.x=1;
g.y=5;
h.x=4;
h.y=2;
System.out.println("g.x="+g.x);
System.out.println("g.y="+g.y);
System.out.println("h.x="+h.x);
System.out.println("h.y="+h.y);
}
}
输出:
g.x=1
g.y=2
h.x=4
h.y=2
答案 0 :(得分:1)
静态变量是每个类一个,而不是每个实例一个。
g.y
和h.y
(以及G.y
)都引用同一个变量,因此最后一个分配获胜,值为2.
通过类的实例访问static
变量很困惑,但Java允许它。
答案 1 :(得分:1)
提示:尝试考虑静态变量的用途和行为。
阅读this:
调用在其声明中具有static修饰符的字段 静态字段或类变量。他们与班级有关, 而不是与任何对象。该类的每个实例都共享一个 类变量,它位于内存中的一个固定位置。任何对象 可以更改类变量的值,但类变量也可以 在不创建类的实例的情况下进行操作。