A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凡延海 中级黑马   /  2012-5-20 16:32  /  2184 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class FinallyTest{
        public static void main(String[] args)
        {
                try
                {
                        System.out.println("Hello");
                        System.exit(0);//return;
                }
                finally
                {
                        System.out.println("Goodbye");
                }
        }
}
我在学习finally感觉就是不论前边不论程序结不结束都是要执行finally中的代码的,我试着用return和System.exit来做,return的时候两个都打印,用System.exit的时候就只打印第一句,我糊涂了,请问return和System.exit的内部机制是怎样的呢。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
本帖最后由 杨尧 于 2012-5-20 16:46 编辑

对于只有一个单一方法的类或者系统来说是一样的,但是对于含有多个类和方法,且调用关系比较复杂时就不一样了。
System.exit()是指所有程序(方法,类等)停止,系统停止运行。
return只是这一个方法停止,并不影响其他方法的顺序运行。
System.exit( ) 通常是值退出程序
而return是指退出某个方法
比如:
void a(){
  b();
  c();
  d();
}其中b()中是return.
c()是System.exit();
那么
b()会执行,c()会执行,而d()不会被执行。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主 finally有一种情况不会运行  就是遇到 System.exit(0);   这语句是直接告诉虚拟机 结束程序  所以是读不到finally语句的。。。。这是一种特殊情况  楼主不必深究  记住就好
回复 使用道具 举报
return:

       是一个关键字,表明返回调用当前方法的方法中。 如果是在main中,调用它的方法就是系统了,在单线程时也可以起到退出JVM的作用,但没有返回值,存在多线程的话main线程并不能保证JVM退出.,因为要所有的线程都结束才行,如果是在其他地方,这个语句只能返回上级调用中。

       即在非程序入口方法中,则System.exit(0)直接终止程序,就算后面有代码也不执行了,而return则返回至调用该方法的地方,如果后面还有代码则继续执行。

       这个在main()中的区别:
        当用return返回时,main()并不能立即运行结束,而用System.exit(数值);(system.exit(0)表示程序正常退出,system.exit(1)表示非正常退出,都没有返回值))时,main()将立即无条件的结束。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
finally 语句块通常是都要执行的,但是有几种情况例外:
1
在 try 语句块中执行了 System.exit (0) 语句,终止了 Java 虚拟机的运行。
2
在执行 try 语句块或者 catch 语句块时被打断(interrupted)或者被终止(killed),与其相对应的 finally 语句块可能不会执行。
3
还有更极端的情况,就是在线程运行 try 语句块或者 catch 语句块时,突然死机或者断电,finally 语句块肯定不会执行了。当然这也是一种特殊情况。在此只是说明上面的问题

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢众位告诉,俺明白了。
回复 使用道具 举报
return还要执行finally,System.exit(0);是推迟虚拟机。
除了System.exit(0);finally总会执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马