Java 输出奇怪的程序

Java 输出奇怪的程序,java,methods,main,Java,Methods,Main,这就是我感到困惑的计划: 公共类演示{ 静态整数计数=0; 公共静态void main(字符串[]args){ 如果(计数

这就是我感到困惑的计划:

公共类演示{
静态整数计数=0;
公共静态void main(字符串[]args){
如果(计数<3){
计数++;
主(空);
}否则{
系统输出打印项次(“其他”);
}
System.out.println(“你好,世界!”);
}
}
这是我得到的输出:

else
Hello World!
Hello World!
Hello World!
Hello World!

我不明白为什么要先印别的。你能解释一下吗?谢谢,它首先在控制台上显示并不意味着它首先被执行

代码启动时,执行
if
语句,然后调用
main()
。在到达
else
语句之前,不会进行打印。这就是调用
main()
三次的时候

因此,执行增加了变量并提高了
else

然后,对于每个递归,在打印
else/if
之前,再打印一行


就是因为这个原因,因为你先有了
else
,然后有了4次
Hello World。每个递归一个。

简而言之,您的代码有几个原因可以解释为什么它会这样做:

static int count = 0;
您使用static on count,这意味着所有内容都引用相同的整数

main(null);

您递归调用
main
,但调用方正在等待
main
退出。因此,您将
count
递增三次,在正在完成其执行的主要函数上打印“else”,最后打印“Hello,World!”。

您使用了递归,因此
Hello World
打印只会在递归(以及
if/else
语句)结束时执行


这就是为什么打印的第一行是
else

使用调试器逐步检查代码的原因。甚至只需要一支铅笔和一张纸,甚至只需要一张纸和一支笔就可以写出每行发生的事情,把任何打印出来的语句都写在你的行边上。
(像迈克一样,我也是手工执行的爱好者。调试器可以正确地向你显示正在发生的事情,并可以检查你的手工执行,但是如果你不用电脑也可以手工执行,你会学到更快。是的。手工执行迫使你更深入地思考发生了什么。有了调试器,你可以一步一步地完成执行不明白为什么会这样。