我们知道JVM在类执行期间查找main()方法。我们可以自定义JVM来执行我们自己的自定义函数而不是默认的main方法吗? 如果是的话,我们该怎么做?
答案 0 :(得分:3)
您可以通过实现原生自定义启动器来执行此操作,如下所述:
但坦率地说,如果你只是想为入口点使用不同的约定,那就不值得。一种更简单的方法是使用传统的main
方法编写“代理”入口点类,找到/加载/调用您的“真实”入口点。
另一方面,如果您的目标是在调用main
方法之前执行某些代码,那么一个技巧就是将代码放入入口点的静态初始化程序块中类。例如:
public class Entry {
static {
System.out.println("Hello world");
}
public static void main(String[] args) {
// ...
}
}
将在调用main
方法之前打印“Hello world”。
推测!还可以识别发现/加载/调用普通入口点类的隐藏Java引导类。然后,您可以通过向引导类路径添加修改版本来替换它。但是,你将陷入危险的境地。如果你弄错了,对隐藏机制的干扰可能会很严重。
答案 1 :(得分:2)
没有。 main(String[])
方法是Java entry point。您可以将应用程序打包为jar,然后可以设置Main-Class
并像java -jar myapp.jar
一样运行它。另见Setting an Application's Entry Point。话虽这么说,任何static
初始化块都将在 main
之前运行。但是如果指定的类没有main
方法,则会出现异常。我能想到的唯一其他例外是Servlets和(几乎死)Applet。