return语句在try-catch-finally中的执行顺序,这个问题很早在Q群上听闻,今天结合网上资料以及自己的实践,大体明白了:
-
在try范围执行时抛出异常后,try里面剩余的代码不再执行,直接跳到catchpublic 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 错误
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
2
4
3
说明catch的
return 2; 是无效的,因为
return 3; 首要地返回了结果。 如果让try执行return,结果也是表明try的return 1;是无效的!