我们可以在没有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版本执行。