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