Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何配置JVM以调用自定义方法而不是主方法?_Java_Jvm - Fatal编程技术网

Java 如何配置JVM以调用自定义方法而不是主方法?

Java 如何配置JVM以调用自定义方法而不是主方法?,java,jvm,Java,Jvm,我们知道JVM在类执行期间查找main()方法。我们可以自定义JVM来执行我们自己的自定义函数,而不是默认的main方法吗? 如果是,我们怎么做?否。main(String[])方法是Java。您可以将应用程序打包为jar,然后可以设置Main类,并像java-jarmyapp.jar一样运行它。另见。也就是说,任何static初始化块都将在main之前运行。但是,如果指定的类没有main方法,则会出现异常。我能想到的唯一其他例外是servlet和(几乎死亡的)applet。您可以通过实现本机自

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

否。
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++。