finally和return的執行順序
今天看到一段程式碼,try中有return語句,後面還有一個finally,不知道執行過程是什麼樣的。於是來試驗了一下。
1.try和catch中有return時,finally裡面的語句會被執行嗎
我們可以來分別看看
(1)執行try中的return時
public class tryDemo {
public static int show() {
try {
return 1;
}finally{
System.out.println("finally模組被執行");
}
}
public static void main(String args[]) {
System.out.println(show());
}
}
輸出結果如下:
(2)執行catch中的return時
public class tryDemo {
public static int show() {
try {
int a = 8/0;
return 1;
}catch (Exception e) {
return 2;
}finally{
System.out .println("finally模組被執行");
}
}
public static void main(String args[]) {
System.out.println(show());
}
}
其結果如下:
我們可以得出結論:
如果程式是從try程式碼塊或者catch程式碼塊中返回時,finally中的程式碼總會執行。而且finally語句在return語句執行之後return返回之前執行的。可以使用編譯器的Debug功能檢視詳細過程。
2.如果finally也有return的時候……
public class tryDemo {
public static int show() {
try {
int a = 8/0;
return 1;
}catch (Exception e) {
return 2;
}finally{
System.out.println("finally模組被執行");
return 0;
}
}
public static void main(String args[]) {
System.out.println(show());
}
}
執行結果如下:
結論:
我們可以看到當finally有返回值時,會直接返回。不會再去返回try或者catch中的返回值。
3.finally中對於返回變數做的改變會影響最終的返回結果嗎
我們先來看一看如果try或者catch中的返回值是普通變數時。
public class tryDemo {
public static int show() {
int result = 0;
try {
return result;
}finally{
System.out.println("finally模組被執行");
result = 1;
}
}
public static void main(String args[]) {
System.out.println(show());
}
}
執行的結果如下:
並不會改變返回的內容。
當返回的變數的型別是引用型別時,結果也是一樣的
程式碼如下:
public class tryDemo {
public static Object show() {
Object obj = new Object();
try {
return obj;
}finally{
System.out.println("finally模組被執行");
obj = null;
}
}
public static void main(String args[]) {
System.out.println(show());
}
}
結果如下:
我們可以得出以下結論:
如果try和catch的return是一個變數時且函式的是從其中一個返回時,後面finally中語句即使有對返回的變數進行賦值的操作時,也不會影響返回的值。
相關推薦
finally和return的執行順序
今天看到一段程式碼,try中有return語句,後面還有一個finally,不知道執行過程是什麼樣的。於是來試驗了一下。 1.try和catch中有return時,finally裡面的語句會被執行嗎 我們可以來分別看看 (1)執行try中的retur
java中異常處理finally和return語句的執行順序
finally程式碼塊的語句在return之前一定會得到執行 如果try塊中有return語句,finally程式碼塊沒有return語句,那麼try塊中的return語句在返回之前會先將要返回的值儲存,之後執行finally程式碼塊,最後將儲存的返回值返回,
JAVA try catch finally return 執行順序
JAVA try catch finally return 執行順序 參考:https://www.cnblogs.com/superFish2016/p/6687549.html 一、結論 1、不管有沒有出現異常,finally塊中程式碼都會執行; 2、當try和catch中有
從矩陣乘法來看-O優化和ijk執行順序對程式效能的影響
從矩陣乘法來看-O優化和ijk執行順序對程式效能的影響 根據計算矩陣乘積的c程式,主要想做想做兩件事情: 統計採用不同的優化選項編譯程式所用的時間,感受-O優化帶來的效能提升。 看看矩陣乘法中不同迴圈順序對程式效能的影響: 改變三重迴圈的順序,統
try,finally和return之間的關係
一,finally不是一定會被執行的(1,try沒別執行,2.system.exit(0)) 二,沒有return的普通執行方式 public static void main(String[] args) { try {
java中的finally和return
java中的finally和return 直接看程式碼和截圖吧 由此可見,finally中如果return返回值了,那在外面就不能return返回值了 如果外面return返回值了,那finally中就不能return返回值了 程式設計這種東西,大家最好是自己親
printf()和scanf()執行順序
原始碼:void main(){int a,b,c,x2,y2;printf("輸入a,b,c:\n");scanf("%d%d%d",&a,&b,&c);result(a,b,c,&x2,&y2);test(a,b,c,x2,y2);
java 中try catch finally 的具體執行順序返回結果+程式碼測試
執行順序的重點就在finally中,具體如下: (1)、try:它裡面放置可能引發異常的程式碼(2)、catch:後面對應異常型別和一個程式碼塊,用於表明該catch塊用於處理這種型別的程式碼塊,可以
spring [email protected]和bean執行順序問題
從配置檔案中獲取配置使用@value,當你在bean載入時呼叫@value時會出現空指標異常。因為bean載入完成後才會執行@value。 解決辦法:spring boot 有兩種獲取配置檔案值的方式 第一種,@value(“${a.b}”)傳屬性名稱 第二種:使
JS事件機制:事件繫結、事件監聽、事件委託(代理)和事件執行順序總結
JS 對於使用者的操作做出響應,就必須對DOM元素繫結事件處理函式 事件繫結 1、在DMO中直接繫結事件 <input type="button" value="click me"
servlet 和 filter執行順序
在我們寫程式碼時,在web.xml中總能發現類似下面的程式碼: <spanstyle="font-family:KaiTi_GB2312;font-size:18px;"><spanstyle="font-family:KaiTi_GB2312;
SQL語句中的AND和OR執行順序問題
情景:一個搜尋框 可以同時根據使用者賬號或者使用者名稱字 搜尋匹配條件的使用者 如果搜尋框中沒有搜尋條件 則查出所有教師使用者 遇到的問題: 查詢條件時為輸入框內的內容 先在資料庫中模擬測試 結果
Script標籤和指令碼執行順序
0.前言 估計所有讀者也慢慢適應我每次講東西之前先墨跡一段的習慣了。 那麼我今天就來個轉換,我!不!墨!跡!了! 正文開始。 1.script標籤的預設行為 首先我們先來看一下 <script> 標籤 的幾個重要特性: scri
從join on和where執行順序認識T-SQL查詢處理執行順序
SQL語句中join連表時on和where後都可以跟條件,那麼對查詢結果集,執行順序,效率是如何呢? 通過查詢資料發現:區別:on是對中間結果進行篩選,where是對最終結果篩選。執行順序:先進行on的過濾, 而後才進行join。效率:如果是inner join, 放o
JS和CSS執行順序
一、指令碼和樣式表載入、執行順序總結1、指令碼web的模式是同步的,開發者希望解析到一個script標籤時立即解析執行指令碼,並阻塞文件的解析直到指令碼執行完。如果指令碼是外引的,則網路必須先請求到這個資源——這個過程也是同步的,會阻塞文件的解析直到資源被請求到。這個模式保持了很多年,並且在html4及htm
try-catch-finally語句中用什麼方法退出或者不執行finally就直接退出並且return和finally的執型順序是怎樣的
正常來說finally中的程式碼是一定會執行的。他和return的執行順序是在return執行之後但真正返回結果之前的中間執行,finally中新增return語句可以替換掉catch中的return語句從而可以證明這一點。但是我們可以通過制定system.exit(int
finally在try和catch塊以及return中的執行順序
執行順序 無catch時 finally會在try包含的return之後執行,會在try外面的return之前執行 當有catch時 finally是在catch執行之後catch包含的return之前執行的 執行順序圖
有return情況下try,catch和finally的執行順序
結論: 1、不管有木有出現異常,finally塊中程式碼都會執行; 2、當try和catch中有return時,finally仍然會執行; 3、finally是在return後面的表示式運算後執行的(此時並沒有返回運算後的值,而是先把要返回的值儲存起來,管
java中的try中的return和finally的執行順序問題
在TestTryReturn這個例子中的執行順序為:用debug進行除錯,會發現,先呼叫的是return,再呼叫finally,最後在呼叫return public class TestTryReturn { public static void main(Strin
finally,return 的執行順序
方法 返回值 存在 pub 無法 style 語句 tail art 參考:http://blog.csdn.net/qj19842011/article/details/45675057 關於finally,return的執行順序 例子: try{ return