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

时间:2016-02-29 12:04:17

标签: java static jvm

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

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

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

3 个答案:

答案 0 :(得分: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);
    }
}

打印

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

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

答案 1 :(得分:1)

静态部分

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!!!");
      }   
}

,输出首先是静态部分,然后是主方法中定义的代码。

答案 2 :(得分:0)

每次启动JVM并将类加载到类中时,都会使用类加载静态方法,但是没有任何内容可以调用它或在JVM内部输出其内容。作为每种语言(我知道),你需要一个处理器用于你的参数,如果是Java,它是main()方法。