java-在控制台上打印消息而不使用main()方法

采访中有人问我这个问题。

如何在不使用main()方法的情况下在控制台上打印消息?

Nandkumar Tekale asked 2020-07-06T02:25:07Z

10个解决方案

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

javac在jvm开始寻找java之前退出程序

(注意:这仅适用于Java6。即使它使用JDK 7的javac进行编译,也无法与其java一起运行,因为它期望使用main(String[])方法。)

Bala R answered 2020-07-06T02:25:23Z
12 votes
public final class Main {
static {
System.out.println("Hello World");
System.exit(0);
}
}

在调用System.exit方法之前,因此在调用System.halt之前,Runtime.runFinalizersOnExit启动VM关闭之前,在加载类后立即首先执行静态块。

System.exit方法停止当前线程的执行,所有其他线程停滞在其轨道中。 调用System.exit时,虚拟机将在关闭之前执行两项清理任务。

首先,它执行已向System.exit注册的所有关闭挂钩。 这对于释放VM外部的资源很有用。 对于虚拟机退出之前必须发生的行为,请使用关闭挂钩。

当调用System.exit时,VM执行的第二个清理任务有关终结器。 如果是System.halt或它的邪恶双胞胎已调用Runtime.runFinalizersOnExit,VM在以下位置运行终结器所有尚未完成的对象。 这些方法已过时很久了时间以前,并且有充分的理由。 请勿致电System.runFinalizersOnExit或Runtime.runFinalizersOnExit由于任何原因:它们是最Java库中的危险方法。 调用这些方法可能导致终结器在活动对象上运行,而其他线程正在同时操作它们,导致行为不稳定或死锁。

总之,System.exit立即停止所有程序线程; 它不是导致finally块执行,但是在停止之前它会运行关闭钩子虚拟机。 VM关闭时,使用shutdown挂钩终止外部资源下。 通过调用以下命令可以停止VM,而无需执行关闭挂钩System.halt,但很少使用此方法。

Lion answered 2020-07-06T02:26:03Z
11 votes
在名为A.java的文件中
class Con {
String hi = "\n\nHello World\n\n";
}

您只需要在Windows上编译程序即可。 不运行它。 :-P

Peter Lawrey answered 2020-07-06T02:26:28Z
7 votes

您可以定义一个自定义类加载器来打印您的消息:

public class MyClassLoader extends ClassLoader {
public MyClassLoader(ClassLoader other) {
super(other);
System.out.println("Hi there");
System.exit(0);
}
}

然后运行java命令:

java -Djava.system.class.loader=MyClassLoader

(不需要添加类作为参数)

Arnaud answered 2020-07-06T02:26:56Z
6 votes
class MainMethodNot
{
static
{
System.out.println("Hello World");
System.exit(0);
}
}

由于静态初始化程序块是在首次加载类时执行的,因此我们无需编写main方法就可以打印出“ Hello World”。 使用“ System.exit()”命令停止执行。 因此,我们防止出现“找不到主要方法”错误。这是一个非常棘手的问题

Massimiliano Peluso answered 2020-07-06T02:27:18Z
3 votes

直到Java 6才可以使用System.out.println(); 没有main()。从Java 7开始,不可能使用静态块来做到这一点。 仍然会在主类中请求主方法。

Pankaj Manali answered 2020-07-06T02:27:38Z
2 votes

如果您也不想使用静态块,则可以按照以下方式完成

public class NoMain {
private static final int STATUS = getStatus();
private static int getStatus() {
System.out.println("Hello World!!");
System.exit(0);
return 0;
}
}

但是,请注意,这是针对Java 6版本的。 它在Java 7中无法正常运行,据说Java 7支持该功能。我尝试使用JDK 1.8.0_77-b03,但仍无法正常工作

JavaHopper answered 2020-07-06T02:28:03Z
2 votes

是的,您可以在不使用main()的情况下将消息打印到控制台。

使用JUnit创建测试并执行它:

@Test
public printTest() {
System.out.println("myprint");
}
sunny answered 2020-07-06T02:28:27Z
1 votes

是的,一种方法是静态块,但在JDK的早期版本中不是JDK 1.7。

class Withoutmain{
static{
System.out.println("Message: Your message can be print on console without main() method");
System.exit(0);
}
}

输出:消息:您的消息可以在没有main()方法的情况下在控制台上打印(如果不是JDK7)

输出:错误:在类A3中找不到主要方法,请将该主要方法定义为:公共静态void main(String [] args)

参考

Niranjan answered 2020-07-06T02:29:00Z
0 votes

实际上,它在Java 8的最新更新中不起作用。您可以根据他们的说法将其称为错误修复,但据我所知,我不能将其称为错误修复,因为它还会导致 Java编程中也没有多少概念上的改变。

learner8269 answered 2020-07-06T02:29:20Z