改变Java程序的执行起点

时间:2015-03-23 05:50:11

标签: java

这是我被问到的面试问题。我们都知道Java程序的执行从主方法开始,具有以下签名:

public static void main(String[] arg)

有没有办法将Java程序的执行起点改为另一种方法,比如通过调整任何JVM配置参数?

3 个答案:

答案 0 :(得分:4)

没有。无论应用程序在幕后做了什么,或者事情如何摆弄,您的程序必须包含一个声明为public static void main(String[] args)的方法(或args的某些vararg声明。)

the JLS, section 12中列出了这一点:

  

Java虚拟机通过加载指定的类然后在此指定的类中调用方法main来启动。

如果main不存在,则会出现运行时错误 - 具体而言,NoSuchMethodError(它会抱怨找不到main)。

答案 1 :(得分:1)

有没有办法将Java程序的执行起点改为另一种方法,比如通过调整任何JVM配置参数?

答案是否定的。你不能。

当普通JVM开始运行一个类时,它会在类中查找main方法。这就是jvm的设计方式。

您还可以在答案中添加..还有其他java程序的执行模型。例如applet,servlet等

applet将在没有main方法的情况下支持jvm的浏览器中运行。 servlet将在没有main方法的servlet容器中运行。

你在静态块中添加的内容在main之前执行...但是如果没有main,类仍然无法运行。因此,理论上你可以通过添加一个静态块来改变java程序的起始点,但如果没有类中的main,程序执行将会失败。

如果你想继续炫耀那么你可以说,因为main不是关键字..我们可以更改jvm代码来识别另一个方法名称而不是main ..但是为此我们更改了jvm代码..不能传递参数

答案 2 :(得分:0)

确实可以通过选择具有我想要的 main 的几种方法中的任何一种来启动应用程序。我一直这样做是为了测试目的。我会将此技术视为调整JVM配置参数。以下是java文档所说的内容。

Setting an Application's Entry Point