黑马程序员技术交流社区
标题:
JAVA中try,catch,finally的return研究
[打印本页]
作者:
chjxs
时间:
2012-10-4 21:36
标题:
JAVA中try,catch,finally的return研究
1.finally块和最外层有且只能有一个return,否则出编译期错误。(catch块不影响此结论)
——> try块和最外层有且只能有一个return,否则出编译期错误。(try块有时,catch块也必须有return)
——> return可以不写在外层而写在finally里,但是会报警告。(try块,catch块不影响此结论)
2.finally有return时,不管有没有异常,都会从finally的return跑掉
——> try块有return。没有异常(不进入catch块)时,finally块有return走finally,否则走try的return。
——> 外层有也不走,其实是运行到try的return时,执行finally在返回try的return,但是finally也有return,所以相当于半路跑路了
——> try块有return。有异常(进入catch块)时,finally块有return走finally,否则走catch的return。
作者:
崔朋朋
时间:
2012-10-5 00:31
本帖最后由 崔朋朋 于 2012-10-5 00:35 编辑
public class TryTest {
public static void main(String[] args) {
System.out.println(TryTest.test1());
System.out.println(TryTest.test2());
}
//try、 finally、外部都有return,外部return则必须注释掉。
//对于try 和finally,程序一定会执行finally的return,而放弃try块的return语句
public static String test1()
{
try
{
System.out.println("test1");
return "try-------------1";
} catch (Exception e)
{
}finally
{
return "finally-----------1";
}
//return "外部----------"; 此句若不注释掉,则报Unreachable code的异常。 即该句代码无法被执行到。
}
//若catch 、finally都有return,程序一定会执行finally的return,而放弃catch块的return语句
public static String test2()
{
try
{
throw new Exception();
}catch (Exception e)
{
e.printStackTrace();
return "catch------------2";
}finally
{
return "finally-----------2";
}
}
}
总之,记住:
finally语句块是肯定会被执行到的。若finally中有return,则执行finally中的return语句,放弃其他语句块中的return;若finally中无return,则执行try或者catch中的return语句。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2