代码之家  ›  专栏  ›  技术社区  ›  GuruKulki

有另一个静态方法作为Java程序的入口点吗?

  •  1
  • GuruKulki  · 技术社区  · 15 年前

    众所周知,Java程序将从 public static void main(String[] args) 类的方法。

    因此,我们很好奇,是否还有其他方法可以让另一个静态方法作为入口点,也就是说,我们可以重写JVM的这个属性,从其他方法(而不是main)开始?

    3 回复  |  直到 9 年前
        1
  •  5
  •   Uri    15 年前

    afaik JVM总是从主方法开始。我唯一能找到的官方参考资料是 in section 12.1.4 of the java language specifications ,其中说明:

    12.1.4调用test.main

    最后,在初始化完成后 等级考试(其他 间接加载、链接和 可能发生了初始化),则 调用测试的方法main。

    必须声明方法main 公开、静态和无效。它必须 接受一个单独的参数 字符串数组。

    不过,这对我来说似乎不是一个可怕的限制。从技术上讲,您可以编写一个“mainselector”类,其main()将类和方法的完全限定名作为命令行参数,并使用反射来调用该方法。

        2
  •  1
  •   OscarRyz    15 年前

    这是“可能的”,但这取决于实现。

    引述自 the JVM Specification :

    Java虚拟机通过创建一个初始类来启动,该类是以实现依赖的方式使用Bootstrap类加载器(专利5.3.1)指定的。然后,Java虚拟机链接初始类,初始化它,并调用其公共类方法。 void main(String[]) . 此方法的调用将驱动所有进一步的执行。构成主要方法的Java虚拟机指令的执行可能导致附加类和接口的链接(因此创建),以及调用其他方法。

    一些 Java虚拟机初始类的实现 能够 作为命令行参数提供,如JDK版本1.0和1.1。或者,初始类可以是 由实施提供 . 在这种情况下,初始类可以设置类加载程序,该类加载程序将依次加载应用程序,如Java 2 SDK、标准版V1.2。初始类的其他选择是可能的,只要它们符合上一段中给出的规范。

    Windows 1.6 Java虚拟机 doesn't provide this functionality.

        3
  •  0
  •   Jens Schauder    15 年前

    您总是可以编写自己的JVM(或者采用开放源码版本并稍微修改它)。但它可能是一个带有bug的JVM。至少我假设启动主方法的行为是在JVM/Java语言规范中的某个地方。