代码之家  ›  专栏  ›  技术社区  ›  user2824612

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

  •  0
  • user2824612  · 技术社区  · 11 年前

    当我运行这个程序时,它会给我以下输出。为什么我的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
    
    3 回复  |  直到 11 年前
        1
  •  1
  •   rgettman    11 年前

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

    二者都 g.y h.y (以及 G.y )引用相同的变量,所以最后一个赋值获胜,值为2。

    访问 static 变量,但Java允许。

        2
  •  1
  •   Alexis C.    11 年前

    提示: 试着想想静态变量的用途和行为。

    阅读 this :

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

        3
  •  0
  •   Santhosh Deepu    3 年前

    因为,y是静态的 所以,首先你指定y=7,然后是5,最后是2。 第一个值超过5,然后再次超过2。现在当前的y值是2。 如果你没有提到这个值是静态的,那么你的输出将是(g点y=5) 和(h点y=2)