亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java異常----try、catch和finally塊中的return執行順序

發布時間:2020-07-09 17:39:46 來源:網絡 閱讀:321 作者:沙漏半杯 欄目:編程語言

1.當Java程序執行try塊、catch塊時遇到return語句,return語句會導致該方法立即結束。系統執行完return語句之后,并不會立即結束該方法,而是去尋找該異常處理流程中是否包含finally塊,若沒有finally塊,則方法終止,返回相應的返回值;


若有finally塊,則立即開始執行finally塊,此時若finally塊中沒有return語句,則系統才會再次跳回來根據try塊或catch塊中的return語句結束方法(但是,不會再次執行return語句體,還是第一次執行的那個結果);若finally塊中有return語句,則finally塊已經結束了方法,系統不會跳回去執行try塊或catch塊里的任何代碼。


沒有finally塊的比較簡單,這里只看有finally塊的,看如下代碼:


[java] view plaincopy


package com.mys.test;??

??

public class Test {??

??

? ? /**?

? ? ?* @param args?

? ? ?*/??

? ? public static void main(String[] args) {??

? ? ? ? Test test = new Test();??

? ? ? ? int a = 0;??

? ? ? ? try {??

? ? ? ? ? ? a = test.test();??

? ? ? ? } catch (Exception e) {??

? ? ? ? ? ? // TODO Auto-generated catch block??

? ? ? ? ? ? e.printStackTrace();??

? ? ? ? }??

? ? ? ? System.out.println("調用test()后a="+a);??

? ? ? ? ??

? ? }??

??

? ? @SuppressWarnings("finally")??

? ? private int test()throws Exception {??

? ? ? ? int count = 5;??

? ? ? ? try{??

? ? ? ? ? ? System.out.println("try塊,count="+count);??

? ? ? ? ? ? return ++count;//main()中輸出6??

//? ? ? ? ? return count++;//main()中輸出5??

? ? ? ? }finally{??

? ? ? ? ? ? count=100000;??

? ? ? ? ? ? System.out.println("finally塊,count++="+count++ +"? ,count="+count);??

? ? ? ? }??

? ? }??

??

}??

第一種finally塊中沒有return語句,則上面代碼輸入如下:

try塊,count=5

finally塊,count++=100000? ,count=100001

調用test()后a=6


其中調用test()后a=6就說明了執行完finally塊后代碼雖然立刻返回了,但不會再次執行try或catch塊中的return語句體,還是第一次執行的那個結果(由局部變量決定的)


[java] view plaincopy


<span >package com.mys.test;??

??

public class Test {??

??

? ? /**?

? ? ?* @param args?

? ? ?*/??

? ? public static void main(String[] args) {??

? ? ? ? Test test = new Test();??

? ? ? ? int a = 0;??

? ? ? ? try {??

? ? ? ? ? ? a = test.test();??

? ? ? ? } catch (Exception e) {??

? ? ? ? ? ? // TODO Auto-generated catch block??

? ? ? ? ? ? e.printStackTrace();??

? ? ? ? }??

? ? ? ? System.out.println("調用test()后a="+a);??

? ? ? ? ??

? ? }??

??

? ? @SuppressWarnings("finally")??

? ? private int test()throws Exception {??

? ? ? ? int count = 5;??

? ? ? ? try{??

? ? ? ? ? ? System.out.println("try塊,count="+count);??

? ? ? ? ? ? return ++count;??

? ? ? ? }finally{??

? ? ? ? ? ? count=100000;??

? ? ? ? ? ? System.out.println("finally塊,count++="+count++ +"? ,count="+count);??

? ? ? ? ? ? return ++count;??

? ? ? ? }??

? ? }??

??

}</span>??

第二種finally塊中有return語句,則上面代碼輸入如下:

try塊,count=5

finally塊,count++=100000? ,count=100001

調用test()后a=100002




2.再來看另一種情況,


[java] view plaincopy


package com.mys.test;??

??

public class Test {??

??

? ? /**?

? ? ?* @param args?

? ? ?*/??

? ? public static void main(String[] args) {??

? ? ? ? Test test = new Test();??

? ? ? ? int a = 0;??

? ? ? ? try {??

? ? ? ? ? ? a = test.test();??

? ? ? ? } catch (Exception e) {??

? ? ? ? ? ? // TODO Auto-generated catch block??

? ? ? ? ? ? e.printStackTrace();??

? ? ? ? }??

? ? ? ? System.out.println("調用test()后a="+a);??

? ? ? ? ??

? ? }??

??

? ? @SuppressWarnings("finally")??

? ? private int test(){??

? ? ? ? int count = 5;??

? ? ? ? try{??

? ? ? ? ? ? System.out.println("try塊,count="+count);??

? ? ? ? ? ? throw new RuntimeException("測試異常");??

? ? ? ? }finally{??

? ? ? ? ? ? count=100000;??

? ? ? ? ? ? System.out.println("finally塊,count++="+count++ +"? ,count="+count);??

? ? ? ? ? ? return ++count;??

? ? ? ? }??

? ? }??

??

}??

上面代碼輸入如下:

try塊,count=5

finally塊,count++=100000? ,count=100001

調用test()后a=100002

try塊中拋出了RuntimeException異常,同時程序中并未使用catch塊來捕獲這個異常,正常情況下,該異常應導致test()方法非正常終止,test()應該沒有返回值。但實際情況是,test()完全可以正常結束.這也符合finally塊執行的流程:


當程序執行try塊、catch塊時遇到throw語句,throw語句會導致該方法立即結束。系統執行完throw語句之后,并不會立即結束該方法,而是去尋找該異常處理流程中是否包含finally塊,若沒有finally塊,則程序立即拋出異常;


若有finally塊,則立即開始執行finally塊,此時若finally塊中沒有return語句,則系統才會再次跳回來拋出異常;若finally塊中有return語句,則finally塊已經結束了方法,系統不會跳回去執行try塊或catch塊去拋出異常。


由于上面的例子是使用的RuntimeException異常,該異常屬于非受查異常,編譯器不要求強制處置的異常

(強制處理的需要用try...catch...或者往上拋出(test() throws Exception),所以,能夠正常輸出.


即沒有異常,如果,把 上例中finally塊中的return ++count;去掉就會拋出異常了!!!


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

满洲里市| 新邵县| 青神县| 昌平区| 剑阁县| 营山县| 崇仁县| 庆安县| 密云县| 东兰县| 安平县| 阜康市| 乐陵市| 陕西省| 如东县| 巩义市| 陆川县| 香格里拉县| 福建省| 栖霞市| 沅江市| 梧州市| 南丹县| 平乐县| 平江县| 罗田县| 从化市| 中江县| 百色市| 玉山县| 平定县| 宝鸡市| 社旗县| 微山县| 高阳县| 广汉市| 渑池县| 乌兰县| 耒阳市| 新绛县| 桃江县|