Java中所需的静态块输出的说明

时间:2013-02-10 08:44:25

标签: java class methods static println

我的代码是: -

class Test
{
  static int a = 11;
  static
  {
    System.out.println("Hello static! " + main() + a);
  }

  public static void main(String[]args)
  {
    System.out.println("Hello String!");
  }

  public static char main()
  {
    System.out.println("Hello char!");
    return 'H';
  }
}

输出: -

Hello char!
Hello static! H11
Hello String!

为什么“你好char!”是在“hello static!”之前打印的?

5 个答案:

答案 0 :(得分:3)

  1. 首先执行静态块。
  2. 在组装要打印的字符串时,它调用main()时没有参数。
  3. main()打印一些输出。
  4. 静态块打印其输出。
  5. 静态块退出。
  6. 您的main(String [])方法执行并打印其输出。

答案 1 :(得分:1)

  

为什么"你好char!"打印之前"你好静电!"?

因为main()方法在完成sysout语句打印Hello static之前被调用并执行。

这是执行顺序: -

  • 已加载课程。
  • static变量a已加载并初始化为11
  • 执行
  • static块。
  • 从那里sysout语句,调用main()静态方法。目前尚未打印Hello static,因为sysout声明尚未完成。
  • 执行控制转到main()方法。因为没有它,当前的sysout语句无法完成。
  • main()方法打印"Hello char",然后返回'H'
  • 执行回到static内的sysout块。
  • sysout完成执行,并打印"Hello static! H11"

注意: - 上面的sysout表示 - System.out.println()

答案 2 :(得分:1)

让我们把它分解。

首先运行的是静态初始化程序块。所以我们运行这一行:

System.out.println("Hello static! " + main() + a);

但在我们调用该方法之前,我们必须调用main(),因为我们必须首先完全评估所有参数。

因此,在静态初始值设定项中的println之前调用它:

public static char main()
{
  System.out.println("Hello char!");
  return 'H';
}

打印出我们在第一行中看到的Hello char!

它返回H,它与Hello static!

一起打印

最后,调用main(string [])来启动程序。我们在那里看到Hello String!

答案 3 :(得分:1)

这里的一般执行逻辑如下:

  1. 加载类,因此执行静态构造函数。
  2. 在构造函数中,评估String(System.out.println()的参数),调用char main()方法。
  3. 评估char main()方法。
  4. char main()内打印字符串:第一个输出行
  5. 静态构造函数中的String已构建,因此可以打印:第二个输出行
  6. 可以执行实际void main(),打印第三行:第三行

答案 4 :(得分:1)

在你的行

  

System.out.println(“Hello static!”+ main()+ a);

main()在System.out.println之前执行,因此有意义的是,char main()中的print语句将在外部print语句“Hello Static”之前执行。