11

我不想更改签名的public static void...String[] args部分,但是否可以“重命名”此功能(例如,只是为了好玩)?

所以执行的入口点将是一个具有另一个名称的函数。

将其重命名为,例如boot(如果不是历史性的,在我的特定情况下更好地反映它的实际用途)。


有关的

我有兴趣做一些不同的事情,但这些问题仍然很有趣:

java 中的 public static void main(String arg[ ] ) 是否已修复?

为什么函数 main() 的名字 main

4

7 回答 7

11

不,Java 语言规范说:

Java 虚拟机通过调用main某个指定类的方法开始执行,并传递给它一个参数,该参数是一个字符串数组。

JVM 规范说了同样的话:

然后,Java 虚拟机链接初始类,对其进行初始化,并调用公共类方法void main(String[])

于 2012-06-08T10:55:33.857 回答
4

简单回答 不,原因,规范就是这样,JVM只会寻找main而不是任何自定义名称作为起点。它必须被称为 main 并带有确切的签名public static void main(String[] args)

从逻辑上讲,除非命令具有传递 start 方法的选项,否则如何JVM知道main它必须寻找boot或其他东西而不是方法是有道理的。java

但这是没有充分理由的要求太多。

其次,由于它的标准化,它也有助于开发人员社区,无论谁查看代码都知道如何运行给定的Java独立程序,或者说如果你有一个项目,你的第一点总是寻找主要方法,然后从那里你继续前行。

于 2012-06-08T10:56:22.470 回答
2

不可以。根据 Java 语言规范,您不能这样做。但是如果你愿意,因为Java是一个开源项目,所以下载Java语言的完整源代码并进行相应的更改(我的意思是更改JVM本身的源代码)。这是您可以做到这一点的唯一方法。

所以现在你可以理解了,为什么我说这是不可能的。

于 2012-06-08T10:56:00.677 回答
2

在开始时,JVM 正在从public static void main以字符串数组作为参数的方法中查找。所以你唯一能做的就是重命名参数args。如果你想要像 boot 这样的方法,没有人会阻止你做这样的事情(我个人不推荐这种“模式”)

static void boot(String[] arguments){
    //your logic
}

public static void main(String[] args) {
    boot(args);
}
于 2012-06-08T10:57:26.903 回答
1

您的应用程序从 开始运行public static void main(String[] args)。这就像 JVM 启动程序的地方。如果您更改它,JVM 会随意不启动您的应用程序。

如果您想将其boot()作为应用程序的起点,请在main().

于 2012-06-08T10:55:46.467 回答
1

简单的答案是NO。当您开始执行程序时,它会查找 public static void main(String[] args)接受字符串数组参数的程序。从这个入口点开始主线程

于 2012-06-08T11:43:19.280 回答
1

是的,如果我们可以改变JVM的配置,让它寻找另一个名字的方法而不是main方法,我们就可以改变main方法的名称。

于 2018-05-23T12:25:51.130 回答