无法理解为什么这个程序给了我这个输出。请解释一下

时间:2013-09-27 18:34:57

标签: java variables static-variables

当我运行这个程序时,它给了我以下输出。为什么我得到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

2 个答案:

答案 0 :(得分:1)

静态变量是每个类一个,而不是每个实例一个。

g.yh.y(以及G.y)都引用同一个变量,因此最后一个分配获胜,值为2.

通过类的实例访问static变量很困惑,但Java允许它。

答案 1 :(得分:1)

提示:尝试考虑静态变量的用途和行为。

阅读this

  

调用在其声明中具有static修饰符的字段   静态字段或类变量。他们与班级有关,   而不是与任何对象。该类的每个实例都共享一个   类变量,它位于内存中的一个固定位置。任何对象   可以更改类变量的值,但类变量也可以   在不创建类的实例的情况下进行操作。