Java 如何配置JVM以调用自定义方法而不是主方法?
我们知道JVM在类执行期间查找main()方法。我们可以自定义JVM来执行我们自己的自定义函数,而不是默认的main方法吗?Java 如何配置JVM以调用自定义方法而不是主方法?,java,jvm,Java,Jvm,我们知道JVM在类执行期间查找main()方法。我们可以自定义JVM来执行我们自己的自定义函数,而不是默认的main方法吗? 如果是,我们怎么做?否。main(String[])方法是Java。您可以将应用程序打包为jar,然后可以设置Main类,并像java-jarmyapp.jar一样运行它。另见。也就是说,任何static初始化块都将在main之前运行。但是,如果指定的类没有main方法,则会出现异常。我能想到的唯一其他例外是servlet和(几乎死亡的)applet。您可以通过实现本机自
如果是,我们怎么做?否。
main(String[])
方法是Java。您可以将应用程序打包为jar,然后可以设置Main类
,并像java-jarmyapp.jar
一样运行它。另见。也就是说,任何static
初始化块都将在main
之前运行。但是,如果指定的类没有main
方法,则会出现异常。我能想到的唯一其他例外是servlet和(几乎死亡的)applet。您可以通过实现本机自定义启动器来实现这一点,如下所述:
main
方法编写一个“代理”入口点类,让它查找/加载/调用您的“真实”入口点
另一方面,如果您的目标是在调用main
方法之前执行一些代码,那么一个技巧是将代码放入入口点类中的静态初始值设定项块中。例如:
public class Entry {
static {
System.out.println("Hello world");
}
public static void main(String[] args) {
// ...
}
}
将在调用main
方法之前打印“Hello world”
投机还可以识别隐藏的Java引导类,该类查找/加载/调用普通入口点类。然后,您可以通过向引导类路径添加修改的版本来替换它。然而,您将误入危险区域。如果你弄错了,对隐藏机制的干扰很可能会导致糟糕的结果。不。但是您可以编写一个main方法,只调用您想要的另一个方法。即使servlet容器也必须有一个main,它只是不属于您自己的部署包的一部分。@chrylis Web浏览器也有一个main,所以即使使用applet,该语句也是正确的。只是想在这个问题上跳出框框思考。@Elliott Frisch:只有当Webbrowser是用Java实现的时候。否则,它没有理由拥有
main
方法。@Elliott Frisch:C根本没有方法,因此也没有“main
方法”。名称的巧合无论如何都是无关紧要的,因为问题是JVM在Java类中搜索main
方法。除此之外,Web浏览器可以用任何语言实现,它不一定是C或C++。