在控制台上打印消息而不使用main()方法
我在接受采访时被问到了这个问题。
如何在不使用main()
方法的情况下在控制台上打印消息?
public class Foo {
static {
System.out.println("Message");
System.exit(0);
}
}
在jvm开始查找main()
之前, System.exit(0)
退出程序。
Ideone链接
(注意:即使它用JDK 7的javac
它也不能用它的java
运行,因为它需要一个main(String[])
方法。)
public final class Main {
static {
System.out.println("Hello World");
System.exit(0);
}
}
一旦类在main();
之前加载,静态块将首先执行main();
方法被调用,因此在调用main()
之前, System.exit(0)
启动VM关闭。
System.exit
方法会暂停当前线程的执行以及其他所有其他线程的执行。 当调用System.exit
,虚拟机在关闭之前执行两个清理任务。
首先,它执行已经用Runtime.addShutdownHook
注册的所有关闭钩子。 这对释放VM外部的资源很有用。 使用关闭挂钩进行虚拟机退出前必须发生的行为。
调用System.exit
时由VM执行的第二个清理任务涉及终结器。 如果已调用System.runFinalizersOnExit
或其恶意双胞胎Runtime.runFinalizersOnExit
,则虚拟机将在尚未完成的所有对象上运行终结器。 这些方法很久以前就被弃用了,理由很充分。 永远不要因为任何原因调用System.runFinalizersOnExit
或Runtime.runFinalizersOnExit
:它们是Java库中最危险的方法之一。 调用这些方法可能会导致终结器在活动对象上运行,而其他线程正在同时操作它们,从而导致不稳定的行为或死锁。
总之, System.exit
立即停止所有程序线程; 它不会导致finally块执行,但它会在停止虚拟机之前运行shutdown hook。 VM关闭时使用关闭挂钩来终止外部资源。 通过调用System.halt
可以暂停虚拟机而不执行关闭挂钩,但这种方法很少使用。
在一个名为A.java
的文件中
class Con {
String hi = "nnHello Worldnn";
}
你只需要在Windows上编译程序。 不运行它。 :-P
链接地址: http://www.djcxy.com/p/20595.html上一篇: Printing message on Console without using main() method
下一篇: Are fields initialized before constructor code is run in Java?