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

时间:2013-03-02 10:35:36

标签: java

根据我的知识,我们无法在没有main方法的情况下执行,因为在运行java程序时。 java虚拟机查找main方法。如果JVM找不到它将显示运行时错误的主方法,则主线程中的异常无法找到主类。

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

这是否真的可行,这些可用性是什么。

4 个答案:

答案 0 :(得分:23)

现在 - 没有


Java 7之前:

是的,顺序如下:

  • jvm加载类
  • 执行静态块
  • 查找main方法并调用它

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

如何测试:

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

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

  

FOO
  java.lang.NoSuchMethodError:main

答案 1 :(得分:3)

由于您也标记了 Java-ee - 然后,这是可能的。

并且在核心java中也可以使用static blocks

并检查此How can you run a Java program without main method?

修改
正如其他答案中已经指出的那样 - 它不支持Java 7

答案 2 :(得分:3)

是您可以在没有main方法的情况下编译和执行使用静态块。 但是在执行静态块(打印)后,您将收到一条错误消息,指出找不到主要方法。

最新信息 - >你不能用JAVA 7版本做到这一点。 IT将无法执行。

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

但是这不会用JAVA 7版本执行。

答案 3 :(得分:2)

您还应该能够使用premain method of a Java agent完成类似的事情。

  

代理JAR文件的清单必须包含属性Premain-Class。此属性的值是代理类的名称。代理类必须实现与主应用程序入口点原则上类似的公共静态预处理方法。在Java虚拟机(JVM)初始化之后,将按指定代理的顺序调用每个premain方法,然后将调用实际的应用程序main方法。每个premain方法必须返回,以便继续启动序列。