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

PKS*_*PKS 3 java static jvm

class WithoutMain {   
       static
       {           
            System.out.println("Without main class!!!");
            System.exit(0);            
       }
}
Run Code Online (Sandbox Code Playgroud)

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

有人可以请指导我为什么Java不支持在java7之后没有main运行程序

Pet*_*rey 8

AFAIK此更改特定于Java 7.在Java 8中,您可以执行此操作.你不能在Java 7中这样做,因为它在没有首先加载失败的类的情况下查找方法.无论如何,它已经在Java 8中被改回.

public class Main {
    static {
        System.out.println("Without main class!!! with " + System.getProperty("java.version"));
        System.exit(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

版画

Without main class!!! with 1.8.0_66
Run Code Online (Sandbox Code Playgroud)

注意:这会杀死整个程序.如果您希望程序在没有主程序的情况下继续运行,则可以执行此操作

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这将阻止错误消息,但如果存在非守护程序线程,则保留后台线程运行.

  • 非常感谢Peter Lawrey清除我的怀疑. (2认同)