Java程序不一定从main()开始,是吗?

时间:2015-02-27 22:09:55

标签: java

我的讲师过去常常告诉我Java程序从main函数开始。但是,这是真的吗?

我的意思是,如果声明了任何全局变量,它们会在main()开始之前分配内存,对吗?

2 个答案:

答案 0 :(得分:3)

从技术上讲,在主方法执行之前,可以完整地执行Java程序。任何形式的程序

class X {
  public static void main(String[] args) {
      ... any code as long as it doesn't refer to args ...
  }
}

可以改写为

class X {
  static {
      ... the same code ...
  }
  public static void main(String[] args) {
  }
}

并且具有完全相同的行为。请注意,仍然需要main方法,但它将在程序的所有其他代码之后执行。

答案 1 :(得分:2)

您可以在此处的文档中找到有关此内容的更多详细信息:http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html

简短版:

  1. JVM已启动并尝试调用main方法
  2. 它发现该类未加载,因此它尝试加载类
  3. 还需要加载所有超类
  4. 然后它发现该类未初始化,因此它初始化它(静态变量在这里初始化)
  5. 开始执行主要方法