-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。

4

5 回答 5

2

首先将 5 放入静态变量 x:x = 5;

然后,您创建另一个在内部范围内有效的 x。它的值为 2,您将其发送给 Arcane 的构造函数,计算yx+1(local x),即2+1=3。在此刻

static x = 5;
y = 3;

现在你调用增量来计算 as 的新值yy+=x也就是 as y = y + x,。即3+5=8

然后打印包含 8 的 y。

我希望这有帮助。

于 2012-05-01T16:10:26.273 回答
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
    }
}
于 2012-05-01T16:10:29.900 回答
0
public Arcane(int 2) {
     int 3 = 2 + 1;
     this.y = 3;
}

public void increment() {
    y += 5; // from static int x -> 8
}
于 2012-05-01T16:13:28.353 回答
0

当您执行以下操作时,您将通过 x=2;

奥术 t = 新奥术(2);

然后在构造函数中,y的值就变成了。y=2+1=3

公共奥术(int x){int y = x + 1; 这个.y = y; }

回到您的 main 方法,以下方法调用分配 y=x+y 的值,即 5+3=8

t.increment();

于 2012-05-01T16:18:07.087 回答
0

这就是为什么。

静态整数 x;

是一个静态变量,行:

x = 5;

修改这个静态变量。

诠释 x = 2;

是影子变量,不用说,不影响早初始化的静态变量。通过阴影变量创建一个对象。
此时 y = 2 + 1 = 3。

t.increment()

将 y 的值更改为 3 + 5。
此时您得到 y = 8 作为最终结果,这完全是关于作用域和阴影的,您需要熟悉的基本编程概念。

于 2012-05-01T16:18:44.497 回答