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

时间:2014-11-12 07:01:49

标签: java

我们可以在没有main方法的情况下执行程序吗?在java中如何告诉我任何示例。你做过那样的例子。

5 个答案:

答案 0 :(得分:9)

是的,有可能:

public class MyClass {
    static {
        Runnable r = new Runnable() {
            public void run() {
                // whatever you like
            }
        };
        Thread t = new Thread(r)
        t.start();
        t.join();
    }
}

现在你运行java将这个类传递给命令。 Java在尝试运行它的main(不存在)之前加载该类,但是在加载类时,它会触发静态块,该块将停止直到线程结束。

如果线程在没有退出的情况下完成,java会抱怨没有主要的方法,但到那时线程可以在任何时间内运行任何东西。

你必须在那里捕捉到一些例外,但它会起作用。

答案 1 :(得分:1)

public class TestWithoutMain {   

    // static block executes first

    static{
        System.out.println("Program without main");  
        System.exit(0);
    }
}
  

注意:这在JDK1.7旧版本(build 1.7.0-ea-b19)中运行良好

     

来自jdk 1.7(build1.7.0-ea-b85),它给出了运行时异常

答案 2 :(得分:0)

是的,顺序如下:

  1. jvm加载类
  2. 执行静态块
  3. 查找main方法并调用它
  4. 因此,如果静态块中存在代码,则会执行该代码。但这样做没有意义。

    如何测试:

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

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

    错误就是这个。

    FOO
    java.lang.NoSuchMethodError: main
    

    和ans是没有主要方法你不能执行程序但事情是你可以使用它,无论哪种方式意味着部分。

    以及如何通过使用这样的静态块来实现。

    static{
            System.out.println("Program without main executing into the environment.");  
            System.exit(0);
        }
    

答案 3 :(得分:0)

在Java 9及更高版本中,您可以使用JShell来执行Java代码,而无需使用主要方法。不适用于独立的应用程序,但是非常适合快速测试代码和原型更改。

答案 4 :(得分:-1)

除非它是Web应用程序,否则我认为对于任何可自行执行的独立应用程序都不可能,Runtime应该知道入口点,运行时设计这样一种方法,即main方法是一个入口点。