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 :(得分: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作为最终结果,所有关于范围和阴影,你需要熟悉的基本编程概念。