情況1
try中有return,finally中沒有return:
public
class
trytest
private
static
inttest()
catch
(exception e)
finally
system.out.
println
("finally");
}return num;
}}
輸出結果如下:
trynum>20 : 90
finally
90分析:顯然「return num += 80」被拆分成了「num = num+80」和「return num」兩個語句,線執行try中的「num = num+80」語句,將其儲存起來,在try中的」return num「執行前,先將finally中的語句執行完,而後再將90返回。
情況2
try和finally中均有return:
public
class
trytest
private
static
inttest()
catch
(exception e)
finally
system.out.
println
("finally");
num =
100;
return num;}}
}
輸出結果如下:
trynum>20 : 90
finally
100分析:try中的return語句同樣被拆分了,finally中的return語句先於try中的return語句執行,因而try中的return被」覆蓋「掉了,不再執行。
情況3
finally中改變返回值num:
public
class
trytest
private
static
inttest()
catch
(exception e)
finally
system.out.
println
("finally");
num =
100;
}return num;
}}
輸出結果如下:
tryfinally
10分析:雖然在finally中改變了返回值num,但因為finally中沒有return該num的值,因此在執行完finally中的語句後,test()函式會得到try中返回的num的值,而try中的num的值依然是程式進入finally**塊前保留下來的值,因此得到的返回值為10。
情況4
將num的值包裝在num類中:
public
class
trytest
private
static num test()
catch
(exception e)
finally
system.out.
println
("finally");
number.num =
100;
}return number;}}
class
num
輸出結果如下:
tryfinally
100分析:從結果中可以看出,同樣是在finally中改變了返回值num的值,在情況三中,並沒有被try中的return返回(test()方法得到的不是100),但在這裡卻被try中的return語句返回了。
總結:
try語句在返回前,將其他所有的操作執行完,保留好要返回的值,而後轉入執行finally中的語句,而後分為以下三種情況:
情況一:如果finally中有return語句,則會將try中的return語句」覆蓋「掉,直接執行finally中的return語句,得到返回值,這樣便無法得到try之前保留好的返回值。
情況二:如果finally中沒有return語句,也沒有改變要返回值,則執行完finally中的語句後,會接著執行try中的return語句,返回之前保留的值。
情況三:如果finally中沒有return語句,但是改變了要返回的值,這裡有點類似與引用傳遞和值傳遞的區別,分以下兩種情況:
1)如果return的資料是基本資料型別或文字字串,則在finally中對該基本資料的改變不起作用,try中的return語句依然會返回進入finally塊之前保留的值。
2)如果return的資料是引用資料型別,而在finally中對該引用資料型別的屬性值的改變起作用,try中的return語句返回的就是在finally中改變後的該屬性的值。
apply call詳細了解
function thisobj argarray call 方法 function call thisobj arg1 arg2.定義 call 呼叫乙個物件的乙個方法,用另乙個物件替換當前物件。例 b.call a,args1,args2 a物件應用b物件的方法 他們都是用來代替另乙個物件呼叫乙...
詳細了解 Cookie Session Token
很久很久以前,web基本上就是文件的瀏覽而已,既然是瀏覽,作為伺服器 不需要記錄誰在某一段時間裡都瀏覽了什麼文件。每次請求都是乙個新的http協議,就是請求加響應,尤其不用記住是誰則剛發了http請求,每個請求相對來說都是全新的。也就是說必須把每個人區分開,這是乙個不小的挑戰,因為http請求是無狀...
詳細了解 int 型別
一 int?是什麼 二 了解nullable結構體 三 nullable型別的取值與轉換 1.getvalueordefault 2.運算子過載 一 int?是什麼 說到int?或者double?平時只是在接收資料庫傳來的可空值型別資料時用用。但int既然是值型別,不能為空,為什麼int?就可空了呢...