如何在没有main方法的情况下运行Java程序?

use*_*129 16 java

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

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

例如:

System.out.println("Main not required to print this");
Run Code Online (Sandbox Code Playgroud)

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

Kon*_*che 38

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

public class Foo {
    static {
         System.out.println("Message");
         System.exit(0);
    } 
}
Run Code Online (Sandbox Code Playgroud)

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有基本的了解.


mae*_*ics 27

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

public class Hello {
  static {
    System.out.println("Hello, World!");
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


Mar*_*nik 14

public class X { static {
  System.out.println("Main not required to print this");
  System.exit(0);
}}
Run Code Online (Sandbox Code Playgroud)

从cmdline运行java X.