Java,无法可视化输出

时间:2014-10-09 04:44:18

标签: java output visualizer

我是编程的新手,我正在学习考试并且不了解一段代码的输出。我希望你能帮助我理解为什么最后打印4?

我将代码放在Java可视化工具网站中,我理解除了行之外的所有内容...... 的System.out.println(myScope.z);会打印4号吗?

非常感谢任何帮助!

public class ScopeTest {
   int z;

public static void main(String[] args){

  ScopeTest myScope = new ScopeTest();
  int z = 6;
  System.out.println(z);
  myScope.doStuff();
  System.out.println(z);
  System.out.println(myScope.z);
}

void doStuff() {
  int z = 5;
  doStuff2();
  System.out.println(z);
}

void doStuff2() {
  z=4;
}
}

5 个答案:

答案 0 :(得分:2)

  1. ScopeTest myScope = new ScopeTest();myScope.z初始化为 0 (默认值)
  2. myScope.doStuff();myScope.z设置为 5 并调用doStuff2()
  3. doStuff2()myScope.z设置为 4
  4. 最终结果是4.关键点是zmain方法中声明的本地doStuff()变量对声明的z成员变量没有任何影响在ScopeTest

答案 1 :(得分:1)

一次一行地执行代码是一个很好的练习,可以弄清楚它在做什么。您应该使用纸和笔以及调试器来完成此操作。因此,让我们按照执行顺序一次一行地执行代码。在每行代码之后,我将解释它的作用。

ScopeTest myScope = new ScopeTest();

创建一个名为myScope的本地引用变量,并将其初始化为一个对象。

int z = 6;

创建名为int的本地z变量,并将其初始化为6

System.out.println(z);

打印局部变量z的值。

myScope.doStuff();

doStuff()对象上调用myScope

int z = 5;

z中创建一个本地变量doStuff(),并将其初始化为5

doStuff2();

致电doStuff2()

z=4;

将名为z成员字段设置为值4。然后将控制权返回doStuff()

System.out.println(z);

打印出局部变量z的值。然后将控制权返回main()

System.out.println(z);

打印出局部变量z的值。 (请记住,我们现在回到main()

System.out.println(myScope.z);

最后,打印成员字段 z。 (请记住,它的值已在doStuff2()中重新设置。此值会被记住,因为此z是成员变量。)

答案 2 :(得分:1)

这是流程:

myScope.doStuff() - > 1. z = 5 2. doStuff2() - > Z = 4

答案 3 :(得分:0)

你在main()方法中调用dostuff(),你已经初始化了z = 5,它是它的局部变量z而不是类变量z。所以你要调用 dostuff2(),其中实际修改类变量z = 4 。这就是它在最后一个syestem.out.println(z)中打印z = 4的原因。希望这能帮助您理解输出。

答案 4 :(得分:0)

因为在第一行中声明的代码z中是实例成员(this context)。

所以当doStuff2()被调用时,this.z被设置为4。

//effectively void doStuff2() { this.z=4; }

方法int zmain内声明的变量doStuff()位于local context

在这里,只有最终设置z上下文中的this的值(在doStuff2()内)才有意义。 因此,

System.out.println(z); >> prints value of local variable z declared in main System.out.println(myScope.z); >> prints the value of instance (of ScopeTest which is myscope here) member z