Bal*_*a R 63
public class Foo {
static {
System.out.println("Message");
System.exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
在System.exit(0)JVM中之前退出程序开始寻找main()
(注意:这仅适用于java 6.即使它使用JDK 7进行编译,javac也无法使用它运行java,因为它需要一个main(String[])方法.)
Lio*_*ion 12
public final class Main {
static {
System.out.println("Hello World");
System.exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
一旦在main();调用方法之前加载类就首先执行静态块,因此在调用之前main(),System.exit(0)启动VM关闭.
该System.exit方法停止执行当前线程,所有其他线程都在其轨道中死亡.当System.exit被调用时,虚拟机执行关闭前两个清理任务.
首先,它执行已注册的所有关闭挂钩Runtime.addShutdownHook.这对于释放VM外部的资源很有用.使用shutdown hooks可以在VM退出之前执行必须执行的操作.
VM System.exit调用时执行的第二个清理任务涉及终结器.如果已经调用了其中一个System.runFinalizersOnExit或它的邪恶双胞胎
Runtime.runFinalizersOnExit,则VM会在尚未最终确定的所有对象上运行终结器.这些方法很久以前就被弃用了,并且有充分的理由.永远不要打电话System.runFinalizersOnExit或
Runtime.runFinalizersOnExit出于任何原因:它们是Java库中最危险的方法之一.调用这些方法可能导致终结器在活动对象上运行,而其他线程同时操作它们,从而导致不稳定的行为或死锁.
总之,System.exit立即停止所有程序线程; 它不会导致finally块执行,但它会在暂停VM之前运行shutdown hooks.当VM关闭时,使用shutdown hooks终止外部资源.可以在不通过调用执行关闭挂钩的情况下暂停VM
System.halt,但很少使用此方法.
Pet*_*rey 11
在一个名为的文件中 A.java
class Con {
String hi = "\n\nHello World\n\n";
}
Run Code Online (Sandbox Code Playgroud)
您只需在Windows上编译该程序即可.不运行它.:-P
您可以定义一个打印消息的自定义类加载器:
public class MyClassLoader extends ClassLoader {
public MyClassLoader(ClassLoader other) {
super(other);
System.out.println("Hi there");
System.exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
然后运行java命令:
java -Djava.system.class.loader=MyClassLoader
(不需要添加类作为参数)
class MainMethodNot
{
static
{
System.out.println("Hello World");
System.exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
因为静态初始化程序块是在首次加载类时执行的,所以我们可以打印出"Hello World"而无需编写main方法.使用"System.exit()"命令停止执行.因此,我们防止"找不到主要方法"错误.这是一个非常棘手的问题
| 归档时间: |
|
| 查看次数: |
51511 次 |
| 最近记录: |