16

可能重复:
在控制台上打印消息而不使用 main() 方法

有人可以建议如何在编写主要方法的情况下运行 JAVA 程序..

例如:

System.out.println("Main not required to print this");

如何在使用类中的public static void main(String arg[])的情况下在控制台上打印上面的行。

4

4 回答 4

38

在 Java 6 之前(包括Java 6),可以使用静态初始化块来执行此操作,正如在控制台上打印消息而不使用 main() 方法的问题中指出的那样。例如使用以下代码:

public class Foo {
    static {
         System.out.println("Message");
         System.exit(0);
    } 
}

让程序在System.exit(0)JVM寻找main方法之前退出,否则会抛出以下错误:

线程“main”中的异常 java.lang.NoSuchMethodError: main

但是,在Java 7中,这不再起作用,即使它可以编译,当您尝试执行它时也会出现以下错误:

程序编译成功,但是没有找到主类。主类应包含方法:public static void main (String[] args)。

这里另一种方法是编写自己的启动器,这样您就可以根据需要定义入口点。

在文章JVM Launcher中,您将找到入门所需的信息:

本文介绍了如何创建 Java 虚拟机启动器(如 java.exe 或 javaw.exe)。它探讨了 Java 虚拟机如何启动 Java 应用程序。它为您提供了有关您正在使用的 JDK 或 JRE 的更多想法。这个启动器在带有 Java Native Interface 的 Cygwin(Linux 模拟器)中非常有用。本文假设您对 JNI 有基本的了解。

于 2012-07-10T20:42:36.190 回答
27

在 JDK6 之前,您可以使用静态初始化程序块来打印消息。这样,一旦你的类被加载,消息就会被打印出来。然后诀窍就变成了使用另一个程序来加载你的类。

public class Hello {
  static {
    System.out.println("Hello, World!");
  }
}

当然,你可以运行程序java Hello,你会看到消息;但是,该命令也会失败并显示一条消息:

线程“main”中的异常 java.lang.NoSuchMethodError: main

[编辑]正如其他人所指出的,您可以通过System.exit(0)在打印消息后立即调用来避免 NoSuchmethodError。

从 JDK6 开始,您不再看到来自static初始化程序块的消息;详情在这里

于 2012-07-10T20:39:15.557 回答
14
public class X { static {
  System.out.println("Main not required to print this");
  System.exit(0);
}}

从 cmdline 运行java X.

于 2012-07-10T20:38:59.253 回答
3

我记得的小程序不需要 main 方法,尽管我不确定它们在技术上是否是一个程序。

于 2012-07-10T20:47:07.573 回答