为什么java(>;=7版本)不支持在没有main方法的情况下运行程序? 没有main的类{ 静止的 { System.out.println(“无主类!!!”; 系统出口(0); } }

为什么java(>;=7版本)不支持在没有main方法的情况下运行程序? 没有main的类{ 静止的 { System.out.println(“无主类!!!”; 系统出口(0); } },java,static,jvm,Java,Static,Jvm,当我试图在大于7的java版本中运行上述代码时,我得到了以下错误。 程序已成功编译,但未找到主类。Main类应包含方法:public static void Main(字符串[]args) 有人能告诉我为什么Java不支持在java7之后运行没有main的程序吗 static { System.out.println("Without main class!!!"); System.exit(0);

当我试图在大于7的java版本中运行上述代码时,我得到了以下错误。 程序已成功编译,但未找到主类。Main类应包含方法:public static void Main(字符串[]args)

有人能告诉我为什么Java不支持在java7之后运行没有main的程序吗

static
       {           
            System.out.println("Without main class!!!");
            System.exit(0);            
       }
每次JVM在内存中加载类时都会执行,但是如果您想启动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并将类加载到静态方法中时,静态方法都会加载该类,但JVM中没有调用该类或输出其内容的内容。正如我所知道的每种语言一样,您的参数都需要一个处理程序,对于Java,它是
main()
方法。

AFAIK此更改是Java 7特有的。在Java8中,您可以这样做。在Java7中不能这样做,因为它在不首先加载失败的类的情况下查找方法。在任何情况下,它在Java8中都被更改了

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
注意:这将终止整个程序。如果你想让程序在没有主机的情况下继续运行,你可以这样做

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();
    }
}

这将防止出现错误消息,但如果存在非守护进程线程,后台线程将保持运行。

这与java版本有什么关系?没有入口点就不能运行程序。只有一个问题,“Java(>=7)”是什么意思?它适用于旧版本的java吗?我的意思是,任何其他版本的java都会出现同样的问题,因为还需要一个入口点(主方法)。@Ricard Nácher Roig:-是的,我们可以在没有主方法的情况下运行版本低于7的java程序。如果您在低于7的版本中运行上述程序,它将发出“没有主类!!!”这实际上是一个骗局:非常感谢Peter Lawrey澄清了我的疑问。我使用的是1.8.0_77版,但我的程序仍然说找不到main方法将main方法定义为public static void main(String[]args)@彼得·劳瑞