我们可以在没有 main() 方法的情况下执行 java 程序吗?

新手上路,请多包涵

据我所知,我们不能在没有 main 方法的情况下执行,因为当你运行 java 程序时。 java 虚拟机寻找 main 方法。如果 JVM 找不到 main 方法,它会显示运行时错误 Exception in thread main could not find the main class。

但是我搜索了很多博客,其中一些人说,是的,如果 java 程序中有一个静态块,它可以通过静态博客来完成,类加载器在 java 调用 main() 方法之前加载所有静态块!。

真的有可能吗,这些的可用性是什么。

原文由 user1999257 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

现在不


在 Java 7 之前:

是的,顺序如下:

  • jvm加载类
  • 执行静态块
  • 寻找主要方法并调用它

所以,如果静态块中有代码,它将被执行。但这样做没有意义。

如何测试:

 public final class Test {
    static {
        System.out.println("FOO");
    }
}

然后,如果您尝试运行该类(使用 java Test 或使用 IDE 的形式命令行),结果是:

FOO

java.lang.NoSuchMethodError: 主要

原文由 Bozho 发布,翻译遵循 CC BY-SA 3.0 许可协议

是的,您可以通过使用静态块在没有 main 方法的情况下编译和执行。但是,在执行静态块后,您会收到一条错误消息,提示未找到主要方法。

最新信息,您不能使用 Java 7 版本执行此操作。它不会执行。

 {
    static
    {
        System.out.println("Hello World!");
        System.exit(0); // prevents “main method not found” error
    }
}

但这不会在 Java 7 版本中执行。

原文由 Nishit Joshi 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题