如何配置JVM来调用自定义方法而不是Main方法?

时间:2016-09-25 01:47:27

标签: java jvm

我们知道JVM在类执行期间查找main()方法。我们可以自定义JVM来执行我们自己的自定义函数而不是默认的main方法吗? 如果是的话,我们该怎么做?

2 个答案:

答案 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。