我们可以在没有main()方法的情况下执行java程序吗?
根据我的知识,我们无法在没有main方法的情况下执行,因为在运行java程序时。 java虚拟机寻找主要方法。如果JVM找不到它会显示运行时错误的主方法错误在主线程中无法找到主类。
但我搜索了很多博客,其中一些人说,是的,如果java程序中有静态块,可以通过静态博客完成,类加载器在java调用main()方法之前加载所有静态块!
它真的有可能,这些可用性是什么。
现在不
在Java 7之前:
是的,顺序如下:
- jvm加载类
- 执行静态块
- 寻找主要方法并调用它
因此,如果静态块中存在代码,则会执行该代码。 但这样做毫无意义。
如何测试:
public final class Test { static { System.out.println("FOO"); } }
然后,如果您尝试运行该类(使用带有java Test
表单命令行或使用IDE),结果为:
FOO
java.lang.NoSuchMethodError:main
因为你也标记了Java-ee – 然后是的,这是可能的。
在核心java中也可以使用静态块
并检查这个如何在没有main方法的情况下运行Java程序?
编辑:
正如其他答案中已经指出的那样 – 它不支持Java 7
您还应该能够使用Java代理的premain方法完成类似的操作。
代理JAR文件的清单必须包含属性Premain-Class。 此属性的值是代理类的名称。 代理类必须实现与主应用程序入口点原则上类似的公共静态premain方法。 在Java虚拟机(JVM)初始化之后,将按照指定代理的顺序调用每个premain方法,然后将调用实际的应用程序main方法。 必须返回每个premain方法才能继续启动序列。
是您可以在没有main方法的情况下编译和执行使用静态块。 但是在执行静态块(打印)之后,您将收到一条错误消息,指出找不到主要方法。
最新信息 – >你不能使用JAVA 7版本。 IT将无法执行。
{ static { System.out.println("Hello World!"); System.exit(0); // prevents “main method not found” error } }
但是这不会用JAVA 7版本执行。