这是我被问到的面试问题。我们都知道Java程序的执行从主方法开始,具有以下签名:
public static void main(String[] arg)
有没有办法将Java程序的执行起点改为另一种方法,比如通过调整任何JVM配置参数?
答案 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文档所说的内容。