变量范围示例说明

时间:2012-05-01 16:04:04

标签: java scope

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。

5 个答案:

答案 0 :(得分:2)

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

然后在内部范围中创建另一个x有效。它的值为2,你将它发送给奥卡的构造函数,将y计算为x+1(局部x),即2+1=3。 此时

static x = 5;
y = 3;

现在,您调用增量计算y的新值y+=x,就像y = y + x一样。即3+5=8

然后打印出包含8的y。

我希望这会有所帮助。

答案 1 :(得分: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
    }
}

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

奥术t =新奥术(2);

然后在构造函数中,y的值变为。 Y = 2 + 1 = 3

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

回到main方法中,以下方法调用指定y = x + y的值,即5 + 3 = 8

t.increment();

答案 4 :(得分:0)

这就是为什么。

  

static int x;

是一个静态变量,行:

  

x = 5;

修改此静态变量。

  

int x = 2;

不用说,

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

  

t.increment()

将y的值更改为3 + 5 在这一点上,你得到y = 8作为最终结果,所有关于范围和阴影,你需要熟悉的基本编程概念。