黑马程序员技术交流社区
标题:
关于finally语句一定要执行的澄清
[打印本页]
作者:
雷云红
时间:
2012-6-7 18:20
标题:
关于finally语句一定要执行的澄清
看到很多同学都说finally一定要执行?我给出我的意见:
finally不一定执行!!!
不多说先上代码:(这段代码是从一个同学那儿借鉴过来的,先谢。)
try{
return false;
}finally{
return ture;
}
很明显,这里的finally就不一定执行了。
此外我们都知道一个在程序运行的时候会出现一个费城可恶的现象:断电。
假如程序执行到try语句,就断电了,finally也不会执行的。
其实我们用finally主要是用在关闭资源。其余几乎不会用到的。
作者:
黑马张扬
时间:
2012-6-7 18:27
本帖最后由 黑马张扬 于 2012-6-7 18:33 编辑
try
{
System.exit(0);
}
finally
{
System.out.println("good");
}
复制代码
这种情况也不会执行!·
作者:
张頔
时间:
2012-6-7 19:07
这样理解不完全对吧,try是为了捕获异常而使用的,而finally是为了不管有无异常发生finally 结构使代码总会执行而使用的。你这样的它的用途就没有意义了。
作者:
葛奎
时间:
2012-6-7 21:59
finally主要是用来关闭资源的 假如在连接数据库的时候,出现了异常 这个时候它仍然与数据库保持连通状态 ,仍占用着系统资源,这个时候就需要在finally关闭资源
作者:
雷云红
时间:
2012-6-7 22:05
呵呵,我说的不是那个,我想说的是那种观念,finally不一定执行。就是要转变finally一点要执行的那种观念,给懂?
地球人都知道“连接数据库的时候,出现了异常 这个时候它仍然与数据库保持连通状态 ,仍占用着系统资源,这个时候就需要在finally关闭资源”,关键在于finally比一定执行就不知道了。{:soso_e141:}
同时对版主表示一下小小不满,都不给分。
作者:
包晗
时间:
2012-6-7 22:48
System.exit(0); 系统退出
finally不执行 只此一家..
作者:
杨天皓
时间:
2012-6-7 22:51
同学,还需要再学习啊。
我记得,如果在try里面遇到了return,那程序会先看有没有finally语句,先执行了finally,再回到try。
给你写个代码,你一运行就知道了
public static void main(String[] args)
{
System.out.println(test1());
}
public static boolean test1()
{
boolean a = true;
try {
return a;
} finally
{
a = false;
System.out.println("进来finally了");
return a;
}
}
复制代码
作者:
陌花╮有意、
时间:
2012-6-8 16:17
public class testReturn {
public static int test() {
try {
return fun1();
} catch (Exception e) {
} finally {
return fun2();
}
}
public static int fun1() {
System.out.println("fun1被执行了");
System.out.println("fun1的确被执行了,返回么?");
return 1;
}
public static int fun2() {
System.out.println("fun2被执行了");
System.out.println("fun2的确被执行了,返回么?");
return 2;
}
public static void main(String[] args) {
System.out.println(testReturn.test());
}
}
结果:fun1被执行了
fun1的确被执行了,返回么?
fun2被执行了
fun2的确被执行了,返回么?
2
//注意,结果中第二句之后并没有返回值(但此时x的值会被记录)
!程序之后暂时给finally操纵了,如果finally“把握住了机会”
用return返回了,那返回的是现在x的值,如果没把握住,不管它执
行了什么代码,返回的x值还是执行try那个时期记录的。
包(package)
return 之前是会先执行finally的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2