下面**執行結果是:
finally語句塊
和是:43
public class test
catch (exception e)
finally
return 0;
} public static void main(string ar**)
}
解釋:
從結果上看,貌似finally
裡的語句是在return
之後執行的,其實不然,實際上finally 裡的語句是在在return 之前執行的
。那麼問題來了,既然是在之前執行,那為什麼a
的值沒有被覆蓋了?
實際過程是這樣的:
當程式執行到try{}語句中的return方法時,它會幹這麼一件事,將要返回的結果儲存到乙個臨時棧
中,然後程式不會立即返回
,而是去執行finally{}中的程式, 在執行a = 2
時,程式僅僅是覆蓋了a的值,但不會去更新臨時棧中的那個要返回的值 。執行完之後,就會通知主程式「finally的程式執行完畢,可以請求返回了
」,這時,就會將臨時棧中的值取出來返回。這下應該清楚了,要返回的值是儲存至臨時棧中的。
再來看乙個例子,稍微改下上面的程式:
public abstract class test
public static int beforefinally()finally
}}/**output:
2*/
在這裡,finally{}裡也有乙個return,那麼在執行這個return時,就會更新臨時棧中的值。同樣,在執行完finally之後,就會通知主程式請求返回了,即將臨時棧中的值取出來返回。故返回值是2。 python mysqldb 查詢返回字典結構
mysqldb預設查詢結果都是返回tuple,輸出時候不是很方便,必須按照0,1這樣讀取,無意中在網上找到簡單的修改方法,就是傳遞乙個cursors.dictcursor就行。預設程式 import mysqldb db mysqldb.connect host localhost user roo...
判斷ExecuteScalar 是否返回結果
executescalar 返回的是首行首列的值,一般用於執行這類查詢 select count from table 返回的型別是 object,如果資料庫中沒有任何記錄時,如何判斷呢?以下是方案 其一 呼叫convert的isdbnull來判斷 object objresult tempcmd....
Oracle 函式function之返回結果集
可以按照最後的寫。工作中常需要經過一段複雜邏輯處理後,得出的乙個結果集。並能夠將這個結果集作為乙個表看待,去進行關聯查詢 我一般採用建立函式function的方式來處理。建立包,宣告function和type create orreplace package pak tem astype date ...