【问题标题】:Can we execute a program without main() method?我们可以在没有 main() 方法的情况下执行程序吗?
【发布时间】:2015-01-08 22:58:15
【问题描述】:

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

【问题讨论】:

  • 可以部分完成意味着你需要有静态方法并且你可以执行它。
  • 好吧,你可以使用单元测试运行部分代码,比如使用 jUnit 等,如果这就是你的意思的话。
  • 在 java 6 之前使用静态块是可能的,但从 java 7 开始,使用静态块是不可能的。
  • 您可以尝试使用Applet

标签: java


【解决方案1】:

是的,有可能:

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 会抱怨没有 main 方法,但到那时线程可能已经运行了任何时间。

您必须在其中捕获一些异常,但它会起作用。

【讨论】:

    【解决方案2】:
    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),它给出了运行时异常

    【讨论】:

      【解决方案3】:

      是的,顺序如下:

      1. jvm 加载类
      2. 执行静态块
      3. 查找 main 方法并调用它

      所以,如果静态块中有代码,它将被执行。但是这样做没有任何意义。

      如何测试:

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

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

      错误会是这样。

      FOO
      java.lang.NoSuchMethodError: main
      

      而且答案是,没有 main 方法你不能执行程序,但问题是你可以用任何一种方式使用它意味着部分。

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2013-02-16
            • 2013-12-01
            • 2018-04-18
            • 1970-01-01
            • 2016-11-14
            • 2011-11-30
            • 2018-05-23
            • 2012-01-26
            • 2021-08-03
            相关资源
            最近更新 更多