2012-05-01 77 views
-1
public class Arcane { 

    static int x; 
    int y; 

    public Arcane(int x) { 
     int y = x + 1; 
     this.y = y; 
    } 

    public void increment() { 
     y += x; 
    } 

    public void print() { 
     System.out.println(y); 
    } 

    public static void main(String[] args) { 
     x = 5; 
     { 
      int x = 2; 
      Arcane t = new Arcane(x); 
      t.increment(); 
      t.print(); 
     } 
    } 
} 

在我的理解中,該程序打印出8個,但我找不出原因。我嘗試插入x = 5。變量範圍示例解釋

+0

在this.y之後,值5是否爲y? – JavaStudent12344

+0

問題是? – MarioDS

+0

我正在尋找一個解釋,爲什麼t結果是8 – JavaStudent12344

回答

2

首先你把5到靜態變量x:x = 5;

然後創建另一個X在內部範圍內有效。它的值是2,並將它發送給Arcane的構造函數,計算yx+1(本地x),即2+1=3。 此時

static x = 5; 
y = 3; 

現在你罵增量計算的yy+=x新的價值,這正是爲y = y + x。即3+5=8

然後打印Ÿ持有8

我希望這有助於。

1
public static void main(String[] args) { 
    x = 5; // static x is 5 
    { 
     int x = 2; //local x is 2 
     Arcane t = new Arcane(x); //new arcane with local x = 2 
     t.increment(); // add static x (5) to field y which is 3, = 8 
     t.print(); //print 8 
    } 
} 
0
public Arcane(int 2) { 
    int 3 = 2 + 1; 
    this.y = 3; 
} 

public void increment() { 
    y += 5; // from static int x -> 8 
} 
0

當你做到這一點下面,你傳遞X = 2;

奧術t =新奧術(2);

然後在構造函數中,y的值變爲。 y = 2 + 1 = 3

public Arcane(int x){int y = x + 1; this.y = y; }

回到在主方法,下面的方法呼叫分配y的值= X + Y是5 + 3 = 8

t.increment();

0

那就是爲什麼。

static int x;

是一個靜態變量,行:

X = 5;

修改此靜態變量。

int x = 2;

是一個影子變量,不用說,不會影響靜態的初始化。會創建一個傳遞shadowed變量的對象。
此時Y = 2 + 1 = 3。

t.increment()

此時你有Y = 8改變了y以3 + 5
值作爲最後的結果,它的所有關於範圍和陰影的基本編程概念都需要熟悉。