java在try,catch中return,在finally中也return会发生什么奇迹?
今天看到一个很基础的问题,如下:
int g(){try{return 1;}catch(Exception e){return 3;}finally{return 2;}}
?同样生成的字节码为:
??? int g();
? Code:
?? 0:?? goto??? 8
?? 3:?? astore_1
?? 4:?? goto??? 8
?? 7:?? pop
?? 8:?? iconst_2
?? 9:?? ireturn
? Exception table:
?? from?? to? target type
???? 0???? 3???? 3?? Class java/lang/Exception
???? 0???? 7???? 7?? any
程序进入方法g时,直接goto8,也就是iconst_2,ireturn直接返回了
?
?
总之:在try{...}catch(XX){...}finally{...}中,如果finally中return,那么try{..}以及catch{...}中的返回都被finally覆盖