黑马程序员技术交流社区
标题:
关于finally的问题
[打印本页]
作者:
凡延海
时间:
2012-5-20 16:32
标题:
关于finally的问题
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的内部机制是怎样的呢。
作者:
8161776
时间:
2012-5-20 16:44
本帖最后由 杨尧 于 2012-5-20 16:46 编辑
对于只有一个单一方法的类或者系统来说是一样的,但是对于含有多个类和方法,且调用关系比较复杂时就不一样了。
System.exit()是指所有程序(方法,类等)停止,系统停止运行。
return只是这一个方法停止,并不影响其他方法的顺序运行。
System.exit( ) 通常是值退出程序
而return是指退出某个方法
比如:
void a(){
b();
c();
d();
}其中b()中是return.
c()是System.exit();
那么
b()会执行,c()会执行,而d()不会被执行。
作者:
程旦
时间:
2012-5-20 16:45
楼主 finally有一种情况不会运行 就是遇到 System.exit(0); 这语句是直接告诉虚拟机 结束程序 所以是读不到finally语句的。。。。这是一种特殊情况 楼主不必深究 记住就好
作者:
陆建平
时间:
2012-5-20 16:52
return:
是一个关键字,表明返回调用当前方法的方法中。 如果是在main中,调用它的方法就是系统了,在单线程时也可以起到退出JVM的作用,但没有返回值,存在多线程的话main线程并不能保证JVM退出.,因为要所有的线程都结束才行,如果是在其他地方,这个语句只能返回上级调用中。
即在非程序入口方法中,则System.exit(0)直接终止程序,就算后面有代码也不执行了,而return则返回至调用该方法的地方,如果后面还有代码则继续执行。
这个在main()中的区别:
当用return返回时,main()并不能立即运行结束,而用System.exit(数值);(system.exit(0)表示程序正常退出,system.exit(1)表示非正常退出,都没有返回值))时,main()将立即无条件的结束。
作者:
余宏
时间:
2012-5-20 19:46
finally 语句块通常是都要执行的,但是有几种情况例外:
1
在 try 语句块中执行了 System.exit (0) 语句,终止了 Java 虚拟机的运行。
2
在执行 try 语句块或者 catch 语句块时被打断(interrupted)或者被终止(killed),与其相对应的 finally 语句块可能不会执行。
3
还有更极端的情况,就是在线程运行 try 语句块或者 catch 语句块时,突然死机或者断电,finally 语句块肯定不会执行了。当然这也是一种特殊情况。在此只是说明上面的问题
作者:
凡延海
时间:
2012-5-20 19:51
谢谢众位告诉,俺明白了。
作者:
韩新凯
时间:
2012-5-20 23:09
return还要执行finally,System.exit(0);是推迟虚拟机。
除了System.exit(0);finally总会执行
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2