return语句在try-catch-finally中的执行顺序
2010-05-17 21:47
633 查看
return语句在try-catch-finally中的执行顺序,这个问题很早在Q群上听闻,今天结合网上资料以及自己的实践,大体明白了:
在try范围执行时抛出异常后,try里面剩余的代码不再执行,直接跳到catch
public class returnDemo{
public static void main(String[] args)
{
Finally e = new Finally();
System.out.println(e.tryThis());
}
public int tryThis()
{
try{
System.out.println("1");
throw new Exception();
return 1;
}catch(Exception ex){
System.out.println("2");
return 2;
}finally{
System.out.println("4");
return 3;
}
//System.out.println("5");
}
}
在编译时,以上已经发生错误了:
returnDemo.java:13: 无法访问的语句
return 1;
^
1 错误
可见在throw 异常后,return 1就无法访问(执行)了!
在这里System.out.println("5"); 给注释了,否则编译时也会提示“无法访问的语句”!道理相信大家明白!
finally的return优先级最高
public class Finally{
public static void main(String[] args)
{
Finally e=new Finally();
System.out.println(e.tryThis());
}
public int tryThis()
{
try{
System.out.println("1");
throw new Exception();
//return 1;
}catch(Exception ex){
System.out.println("2");
return 2;
}finally{
System.out.println("4");
return 3;
}
}
}
执行结果:
1
2
4
3
说明catch的return 2; 是无效的,因为return 3; 首要地返回了结果。 如果让try执行return,结果也是表明try的return 1;是无效的!
在try范围执行时抛出异常后,try里面剩余的代码不再执行,直接跳到catch
public class returnDemo{
public static void main(String[] args)
{
Finally e = new Finally();
System.out.println(e.tryThis());
}
public int tryThis()
{
try{
System.out.println("1");
throw new Exception();
return 1;
}catch(Exception ex){
System.out.println("2");
return 2;
}finally{
System.out.println("4");
return 3;
}
//System.out.println("5");
}
}
在编译时,以上已经发生错误了:
returnDemo.java:13: 无法访问的语句
return 1;
^
1 错误
可见在throw 异常后,return 1就无法访问(执行)了!
在这里System.out.println("5"); 给注释了,否则编译时也会提示“无法访问的语句”!道理相信大家明白!
finally的return优先级最高
public class Finally{
public static void main(String[] args)
{
Finally e=new Finally();
System.out.println(e.tryThis());
}
public int tryThis()
{
try{
System.out.println("1");
throw new Exception();
//return 1;
}catch(Exception ex){
System.out.println("2");
return 2;
}finally{
System.out.println("4");
return 3;
}
}
}
执行结果:
1
2
4
3
说明catch的return 2; 是无效的,因为return 3; 首要地返回了结果。 如果让try执行return,结果也是表明try的return 1;是无效的!
相关文章推荐
- try-catch-finally执行顺序及多return语句效果
- 含有return语句的try-catch-finally语句执行顺序
- 黑马程序员 try或catch中存在return 语句时,它们与finally 的执行顺序问题
- 【Java】try-catch-finally语句中return的执行顺序思考
- return语句在try-catch-finally中的执行顺序
- try...catch...finally中的执行顺序和return语句 总结
- try catch finally中return语句与非return语句的执行顺序问题
- Java-try_catch_finally中带有return语句的执行顺序
- try-catch-finally语句中用什么方法退出或者不执行finally就直接退出并且return和finally的执型顺序是怎样的
- 关于try-catch-finally-return语句的执行顺序
- return语句在try-catch-finally中的执行顺序
- 有return语句情况下,try-catch-finally的执行顺序
- try-catch-finally语句中用什么方法退出或者不执行finally就直接退出并且return和finally的执型顺序是怎样的
- 有return的情况下try catch finally的执行顺序
- asp.net中try catch finally中含有return时的执行顺序
- try-catch-finally结构 try中有异常或return时执行顺序
- Java中try、catch、finally、return的执行顺序
- 含有return 的try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- TRY--CATCH--FINALLY中RETURN返回值执行的顺序(区别)