詳細了解try catch return

2021-10-06 12:04:21 字數 2492 閱讀 4081

情況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?就可空了呢...