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