一道有趣的Try-catch-finally的題.
阿新 • • 發佈:2018-12-31
package com; public class tryReturnFinally { public int aaa(){ int x = 1; int xx = 1; int yy = 2; try{ return x+xx; }catch(Exception e){ }finally{ ++x; } return x; } public static void main(String[] args) { tryReturnFinally t = new tryReturnFinally(); System.out.println(t.aaa()); } }
為何這個輸出是2?
在 return x+xx; 和 ++x; DeBug後,先進入 return x+xx;此時X的值為1,然後按F6 ,又進入到++xDeBug,此時x的值為2,本以為就結束了,按F6就輸出值了,可是DeBug又進入到了 return x+xx;的這個DeBug把這個x+xx的值在控制檯輸出了.挺好玩
有位大佬說:
如果try語句裡有return,那麼程式碼的行為如下:1.如果有返回值,就把返回值儲存到區域性變數中
2.執行jsr指令跳到finally語句裡執行
3.執行完finally語句後,返回之前儲存在區域性變量表裡的值
這裡的return把finally裡同一個變數的值頂替了, 不出異常的情況下以return為準.