public class HelloGoodbye{

try{

System.out.println(“Hello World”);

System.exit(0);

} finally {

System.out.println(“Goodbye World”);

}}

上面这段代码会打印出什么呢?要知道答案需要了解System.exit(0)这个方法在执行过程中到底发生了哪些事情。API文档上描述System.exit方法会导致当前运行线程停止并使其它线程都终止,因此上面这段代码中的finally代码块不会被执行。

进一步探索System.exit被调用后的行为,它在虚拟机在退出前会执行两个清除任务。第一,它会执行所有通过Runtime.addShutdownHook注册的shutdown hooks.它能有效的释放JVM之外的资源。第二,执行清除任务,运行相关的finalizer方法终结对象。

如果需要在调用System.exit方法后仍然打印出“Goodbye World”,可采用如下的方法:

System.out.println(“Hello World”);

Runtime.getRuntime().addShutdownHook(

new Thread(){

public void run(){

System.out.println(“Goodbye world”);

}

}

)
System.exit(0);

在Tomcat的源代码中也有用到shutdownHook,保证了Tomcat在运行时,收到Ctrl+c命令终止JVM进程时,能够正确退出。

System.exit(0)和System.exit(1)区别:

System.exit(0)是将你的整个虚拟机里的内容都停掉了,而finish()只是退出了activity,并没有退出应 用,Application还是存在于内存中的,除非被系统回收。无论如何,内存都释放了!也就是说连JVM都关闭了,内存里根本不可能还有什么东西。关 于finished与System.out的区别,请参考:http://blog.sina.com.cn/s/blog_48e2ea3401017m3f.html


System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序
System.exit(status)不管status为何值都会退出程序。和return 相比有以下不同点:return是回到上一层,而System.exit(status)是回到最上层

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Android(安卓)图片处理方法大全
  3. Android(安卓)Quick Tips #2 — Android(安卓)Studio Productivi
  4. Android(安卓)内存相关 onTrimMemory,onLowMemory
  5. Android百度定位API使用方法
  6. Android模拟器的使用方法(Linux)
  7. Java GC & Android(安卓)GC学习索引
  8. android menu的应用
  9. 【转】Android(安卓)解析如何获取SDCard 内存

随机推荐

  1. 2011.07.18(4)——— android 播放gif
  2. Android(安卓)WIFI
  3. 在android中增加公用资源包(类似framework
  4. 自定义 RadioButton 选中和未选中时的图
  5. Android(安卓)Broadcast receiver 编程
  6. android 动画深入分析(一)《android开发艺
  7. animation的xml定义中的android:interpol
  8. Android的Handler及looper
  9. android:required="false"
  10. Appium学习第一个测试脚本