在try-catch-finally語句中,return和finally的關係
public class TestTryCatch { public static void main(String[] args) { TestTryCatch test = new TestTryCatch(); int fun = test.fun(); System.out.println(fun); } public int fun() { int i = 10; try { //doing something return i; }catch(Exception e){ return i; }finally{ i = 20; } } }
控制檯輸出:10
debug除錯結果:先執行return i;然後執行finally語句,最後回到return i語句,但是finally語句不會改變返回值
結論:無論finally語句塊中執行了什麼操作,都無法影響返回值,所以試圖在finally語句塊中修改返回值是徒勞的。因此,finally語句塊設計出來的目的只是為了讓方法執行一些重要的收尾工作,而不是用來計算返回值的。
相關推薦
在try-catch-finally語句中,return和finally的關係
public class TestTryCatch { public static void main(String[] args) { TestTryCatch test = new TestTryCatch(); int fun = test.fun();
Java中try catch finally語句中含return語句的執行情況總結-程式設計陷阱
前言:有java程式設計基礎的人對java的異常處理機制都會有一定了解,而且可能感覺使用起來也比較簡單,但如果在try catch finally語句塊中遇到return語句,開發者可能就會遇到一些邏輯問題,甚至步入程式設計的陷阱。不信,我們先看看一段小程式,讀
Java筆試面試總結—try、catch、finally語句中有return 的各類情況
### 前言 之前在刷筆試題和麵試的時候經常會遇到或者被問到 **try-catch-finally** 語法塊的執行順序等問題,今天就抽空整理了一下這個知識點,然後記錄下來。 ### 正文 本篇文章主要是通過舉例的方式來闡述各種情況,我這裡根據 try-catch-finally 語法塊分為兩種大情
java中的try中的return和finally的執行順序問題
在TestTryReturn這個例子中的執行順序為:用debug進行除錯,會發現,先呼叫的是return,再呼叫finally,最後在呼叫return public class TestTryReturn { public static void main(Strin
continue,break,return和finally的用法和例項說明
continue,break和return大家再熟悉不過了,今天主要對這三個關鍵字的使用細節和三者之間的區別進行一個簡單的總結。 continue和break最常用也是最基礎的,所以在這裡就不去列舉程式碼例項進行說明了。 continue的作用:如果你在迴圈語句內使用co
try...catch語句中return和finally到底誰先執行
寫在開頭 這個問題真的困擾了我很久,感覺簡直像一個哲學(?)問題。 私下和朋友們對這個問題討論了很久,又在網上查找了很多相關資料,終於還是把這個問題理清楚了。(自認為 ) 我的結論是:在try…catch語句中,當程式執行完return後的表示式後,會轉而執行finally語句塊
Try語句中有return,那麽finally中的code會執行嗎?什麽時候執行?
BE soc clas 操作 div code gpo OS 完成 會執行的,在return前,就是執行到return的時候等待finally執行,執行完成之後在return,如果finally中有return,那麽不再執行try裏面的returnfinally 中語句是指
try-catch-finally語句中用什麼方法退出或者不執行finally就直接退出並且return和finally的執型順序是怎樣的
正常來說finally中的程式碼是一定會執行的。他和return的執行順序是在return執行之後但真正返回結果之前的中間執行,finally中新增return語句可以替換掉catch中的return語句從而可以證明這一點。但是我們可以通過制定system.exit(int
try-catch裏面加了return後,finally還會執行嗎?
nal ati nbsp final 模塊 異常 ava sys 返回 請看下面的方法,在我們的catch裏面,捕獲到了異常之後,我們的catch模塊裏面的語句,還會接著執行,當我們執行到return之後,我們不會立即返回,而是會接著執行finally塊裏面的代碼,只
java中try-catch模塊中with語句塊的作用
天突 java7 all 現在 NPU cat tput file try語句 以前寫try-catch時,遇到一些流、連接等對象,必定需要添加finally語句來關閉這些對象。今天突然發現try的with模塊可以省略在finally手動關閉的動作,可以通過將這些對象定義在
Java異常處理中try{}catch丟擲異常,後面程式碼還會繼續執行麼?
這張圖片上面顯示的程式碼執行之後將會輸出什麼?我們可以發現在procedure()函式結束之後函式後面的內容就不運行了,而主函式裡面的程式還是會繼續執行。反過來再測試如果先發生主函式裡面的異常那麼Pr
在ORACLE SQL語句中,單引號和雙引號的使用
/**在ORACLE中 雙引號" 被當做一個普通的字串來處理**/SELECT '"' AS "字串結果" FROM DUAL;/**正常狀態下,兩個''包含的字串被當做字面值**/SELECT '[email protected]' FROM DUAL;/**測
Javascript Array forEach()中無法return和break,代替方法some()與every()
我們都知道for迴圈裡要跳出整個迴圈是使用break和return,但在陣列中用forEach迴圈如要退出整個迴圈使用break會報錯,使用return也不能跳出迴圈。查閱相關資料,發現無法終止forEach遍歷,跳出迴圈。 使用break將會報錯: var arr =
在活動目錄中,轉移和占用操作主機角色(占用)
操作主機 ad 轉移 占用 楊書凡 如何占用操作主機操作主機是ActiveDirectory中的特殊對象,具備操作主機角色的域控制器擔任著活動目錄核心功能,如果操作主機不可用,整個活動目錄都會出現異常,甚至崩潰。 操作主機角色的唯一性決定了不是任意一臺域控制器都能管理整個域,當一臺承
include包含頭文件的語句中,雙引號和尖括號的區別
標準庫 targe 搜索 環境 com tro 位置 區別 文件 include包含頭文件的語句中,雙引號和尖括號的區別 #include <>格式:引用標準庫頭文件,編譯器從標準庫目錄開始搜索 #incluce ""格式:引用非標準庫的頭文件,編譯器從用戶
MySQL查詢語句中的IN 和Exists 對比分析
In exists nested loop sql優化 查詢效率 背景介紹 最近在寫SQL語句時,對選擇IN 還是Exists 猶豫不決,於是把兩種方法的SQL都寫出來對比一下執行效率,發現IN的查詢效率比Exists高了很多,於是想當然的認為IN的效率比Exists好,但本著尋根究底的原
java異常處理中的return和throw
如果把return和throw放在一起,直接會提示錯誤。"Unreachable statement"(無法被執行). 然而finally卻可以成功騙過編譯器讓兩者並存(是不是可以算是編譯器的一個小bug呢),結果是後執行的會覆蓋前者。 finally如果有return會覆蓋cat
form表單提交中,確定和取消效果的實現
前端開發中的資料提交,目前大多數採用表單提交的方式,但是對於很對初學者來說,只知道在表單格式中,只有一個<input type="submit">,如果有兩個或者要求有多個提交選擇的時候應該怎麼做呢,其實用js就可以簡單實現: 例如下面的效果: 有一個確定和取消的
sql語句中的insert 和 insert into 的區別?into有什麼用?
insert into tableName values(........)insert tableName (欄位名1,欄位名2,。。。)values(。。。。。。)看語句結構就知道區別了 。insert into 是直接對應表所有欄位,values裡必須包含所有欄位。insert是指定欄位對應,value
SQL語句中,為什麼where子句不能使用列別名,而order by卻可以?
當select的表示式很長時,我們經常會用as子句為該表示式指定別名,然而卻發現無法在Where條件中直接使用該別名作為判斷條件. 例如下面的SQL語句: select id, (c1 + c2) as s from t1 where s > 100 執行會