1. 程式人生 > >一道有趣的Try-catch-finally的題.

一道有趣的Try-catch-finally的題.

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為準.