为什么java(>=7版本)不支持没有main方法的运行程序?

Why java (>=7 version) does not support to run program without main method?

class WithoutMain {   
       static
       {           
            System.out.println("Without main class!!!");
            System.exit(0);            
       }
}

当我尝试在 java 大于 7 的版本中 运行 以上代码时,出现以下错误。 程序编译成功,但是没有找到mainclass。 Main class 应该包含方法:public static void main (String[] args).

有人可以指导我为什么 Java 不支持在 java7

之后没有主程序的 运行 程序

静态部分

static
       {           
            System.out.println("Without main class!!!");
            System.exit(0);            
       }

会在每次 JVM 加载内存中的 class 时执行,但是如果你想启动一个 java 应用程序,你将需要一个 main 方法,因为它是每个 java 应用程序,如果你不定义它,那么 JVM 将不知道从哪里开始。


您可以扩展您的代码并执行以下操作:

class WithoutMain {   
       static
       {           
            System.out.println("Static section!!");

       }

      public static void main(String[] args){
            System.out.println("Main class!!!");
      }   
}

并且输出将首先是静态部分,然后是您在 main 方法中定义的代码。

每次启动 JVM 并加载 class 时,静态方法都会与 class 一起加载,但在 JVM 内部没有调用它或输出其内容的任何内容。作为每一种语言(我知道),你需要一个处理程序来处理你的参数,在 Java 的情况下,它是 main() 方法。

据我所知,此更改特定于 Java 7。在 Java 8 中,您可以执行此操作。您不能在 Java 7 中执行此操作,因为它会在不首先加载 class 的情况下查找方法,但失败了。无论如何,它已在 Java 8.

中改回
public class Main {
    static {
        System.out.println("Without main class!!! with " + System.getProperty("java.version"));
        System.exit(0);
    }
}

打印

Without main class!!! with 1.8.0_66

注意:这会终止整个程序。如果你想让程序在没有 main 的情况下保持 运行,你可以这样做

public class Main {
    static {
        // do something which starts threads
        System.out.println("Without main class!!! with " + System.getProperty("java.version"));
        if (true)
            throw new ThreadDeath();
    }
}

这将防止出现错误消息,但如果有非守护线程,则保留后台线程 运行。