在java中,can";“公共静态无效主控”;是重命名还是重构?
我不想更改在java中,can";“公共静态无效主控”;是重命名还是重构?,java,refactoring,main,Java,Refactoring,Main,我不想更改公共静态无效String[]args签名的一部分,但是否可以“重命名”此函数(例如,只是为了好玩) 因此,执行的入口点将是一个具有另一个名称的函数 将其重命名为,比如,boot(如果不是历史性的,那么更好地反映在我的特定情况下它的实际使用情况) 相关的 我对做一些不同的事情很感兴趣,但这些问题仍然很有趣: 没有。上面写着: Java虚拟机通过调用某个指定类的方法main开始执行,并向其传递一个参数,该参数是一个字符串数组 这句话也是这么说的: 然后,Java虚拟机链接初始类,对其进
公共静态无效
String[]args
签名的一部分,但是否可以“重命名”此函数(例如,只是为了好玩)
因此,执行的入口点将是一个具有另一个名称的函数
将其重命名为,比如,boot
(如果不是历史性的,那么更好地反映在我的特定情况下它的实际使用情况)
相关的 我对做一些不同的事情很感兴趣,但这些问题仍然很有趣: 没有。上面写着: Java虚拟机通过调用某个指定类的方法
main
开始执行,并向其传递一个参数,该参数是一个字符串数组
这句话也是这么说的:
然后,Java虚拟机链接初始类,对其进行初始化,并调用公共类方法voidmain(String[])
应用程序从
公共静态void main(字符串[]args)
开始运行。这就像是JVM开始程序的地方。如果您更改它,JVM将可以不启动您的应用程序
如果希望将
boot()
作为应用程序的起点,请在main()
中调用它。根据Java语言规范,您不能这样做。但是,如果您愿意,因为Java是一个开源项目,所以请下载Java语言的完整源代码并进行相应的更改(我的意思是更改JVM本身的源代码)。这是你能做到的唯一方法
所以现在你可以理解,为什么我说这是不可能的。简单的答案是不,原因是,JVM
只会寻找main
,而不是任何自定义名称作为起点。必须使用准确的签名调用mainpublicstaticvoidmain(String[]args)
从逻辑上讲,JVM
如何知道,它必须寻找boot
或其他方法,而不是main
方法,除非java
命令具有传递start方法的选项
但这要求太高了,没有充分的理由
第二,由于它的标准化,它也有助于开发人员社区,无论是谁看代码都知道如何运行给定的
Java
独立程序,或者说如果你有一个项目,你的第一点始终是寻找主方法,从这里继续。在开始时,JVM正在使用字符串数组作为参数,从方法public static void main
进行查看。所以,您唯一能做的就是重命名参数args
。若你们想要像boot这样的方法,并没有人会阻止你们做这样的事情(我个人不推荐这种“模式”)
简单的答案是
否
。当您开始执行程序时,它会查找接受字符串数组参数的公共静态void main(String[]args)
。从此入口点开始主线程。是,如果我们可以更改JVM的配置,并让它寻找另一个名称而不是主方法的方法,那么我们可以更改主方法的名称。好的,如果您也更改JVM的代码,那么这是可能的。感谢您指出了[source]黑客攻击的可能性。:)那么,是否没有可配置的方法呢?为什么,只是出于好奇而投反对票?是的,调用boot
是我目前的工作:我总是觉得现在调用(即命名)它main
实际上不是一个很好的描述性名称我现在就是这样做的。我只是总觉得现在的名字main
其实不是很有描述性。听起来更像是历史产物。我习惯了main
方法,所以对我来说boot
只是一个不必要的方法调用。但是每个人都是自由的,所以不会阻止你:)很好,它是标准化的,但这不应该是一个showstopper,因为它仍然可以有一个标准化的方法来指定入口点的名称。这样做的一个原因是更好地自描述中心函数的名称。虽然我承认,如果main不够描述性,这是有争议的,而且我们还要补充一点,那就是它的广泛使用。正如你正确指出的,main是自我描述的,太多的灵活性变成了一种过激行为,在这种情况下没有太多的优势,你能陈述一下步骤吗
static void boot(String[] arguments){
//your logic
}
public static void main(String[] args) {
boot(args);
}