对意外输出的说明

时间:2017-08-22 06:56:43

标签: java

我写了一个简单的程序来测试静态功能,突然间我可以对这个程序我无法确定逻辑。

代码在java中,如下:

 class Demo{
    public static int Main(String[] ab){
        System.out.println("Hello Main");
        return 0;
    }
}
public class New{
    public static void main(String[] ab){
        String abc[]={"1","2"};
        System.out.println("Hello"+Demo.Main(abc));
    }
}

此代码提供的输出是:

Hello Main
Hello0

根据我的逻辑,这个输出必须是

Hello Hello Main
0

有人可以解释这个程序的意外输出吗?

提前谢谢!

3 个答案:

答案 0 :(得分:2)

您的New.main方法执行此行

System.out.println("Hello" + Demo.Main(abc));

因此,在实际执行println之前,它必须评估所有参数。所以它首先执行Demo.Main。当它执行它时会遇到

System.out.println("Hello Main");
return 0;

因此它打印Hello Main,打印一个新行并返回0. Demo.Main(abc)现在被评估为0,因此它可以继续执行:

System.out.println("Hello" + 0);

并打印Hello0

答案 1 :(得分:2)

输出完全符合预期。

您所做的假设似乎是您的Demo.Main()方法也会返回 Hello Main,但它实际上只会将其写入标准输出。

所以执行的顺序是:

  1. main()已被调用
  2. Demo.Main()已被调用
  3. Demo.Main()Hello Main写入标准输出
  4. Demo.Main()将0返回main()
  5. main()写道"你好"将0结果加到标准输出

答案 2 :(得分:0)

首先执行括号内的代码。这意味着Demo.Main(abc)将首先运行,并在完成后返回0

这意味着,您将首先在控制台上看到Hello Main。在换行后,它会打印Hello并附加Demo.Main(abc)的返回值(确实是0

结果输出是:

Hello Main
Hello0