91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Java異常處理---finally和return的執行順序

發布時間:2020-07-17 04:10:22 來源:網絡 閱讀:433 作者:沙漏半杯 欄目:編程語言

Java異常處理通過5個關鍵字try、catch、throw、throws、finally進行管理。


基本過程是用try語句塊包住要監視的語句,如果在try語句塊內出現異常,則異常會被拋出,


你的代碼在catch語句塊中可以捕獲到這個異常并做處理;還有以部分系統生成的異常在Java運行時自動拋出。


你也可以通過throws關鍵字在方法上聲明該方法要拋出異常,然后在方法內部通過throw拋出異常對象。


?對于可能出現異常的代碼,有兩種處理辦法:

第一、在方法中用try...catch語句捕獲并處理異常,catch語句可以有多個,用來匹配多個異常。例如:

public void p(int x){

?try{

? ...

?}catch(Exception e){

? ...

?}finally{

? ...

?}

}

?

第二、對于處理不了的異常或者要轉型的異常,在方法的聲明處通過throws語句拋出異常。例如:

public void test1() throws MyException{

?...

?if(....){

? throw new MyException();

?}

}?

---------------------------------------------------------------------------------------------------------------------------------------


finally語句塊會在方法執行return之前執行,


package test;

?

public class Test {

?

?/**

? * @param args

? * @throws Exception?

? */

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

? System.out.println(Test.test());

?}

?

?public static boolean test(){

? boolean flag = true;

? System.out.println("Hello World!!!");?

? ? ?try{?

? ? ? System.out.println(1/0); //第一種情況

?

? ? ? System.out.println(1/1); //第2種情況

? ? ? flag = false;

? ? ?}catch(ArithmeticException e){?

? ? ? System.out.println("除數為0!");?

? ? ? throw e;

? ? ?}finally{

? ? ? System.out.println("finally中的語句");

? ? ?}

? ? ?return flag;

?}

?

}


執行結果:


//第一種情況


Hello World!!!

Exception in thread "main" java.lang.ArithmeticException: / by zero

?at test.Test.test(Test.java:46)

?at test.Test.main(Test.java:37)

除數為0!

finally中的語句


//第二種情況


Hello World!!!

1

finally中的語句

false


-----------------------------------------------------------------------------------------------------------------------------


如果每個方法都是簡單的拋出異常,那么在方法調用方法的多層嵌套調用中,Java虛擬機會從出現異常的方法代碼塊中往回找,


直到找到處理該異常的代碼塊為止。然后將異常交給相應的catch語句處理。如果Java虛擬機追溯到方法調用棧最底部main()方法時,


如果仍然沒有找到處理異常的代碼塊,將按照下面的步驟處理:

? ? ? ? 第一、調用異常的對象的printStackTrace()方法,打印方法調用棧的異常信息。

? ? ? ? 第二、如果出現異常的線程為主線程,則整個程序運行終止;如果非主線程,則終止該線程,其他線程繼續運行。


? ? ? ? 通過分析思考可以看出,越早處理異常消耗的資源和時間越小,產生影響的范圍也越小。因此,不要把自己能處理的異常也拋給調用者。

? ? ? ? 還有一點,不可忽視:finally語句在任何情況下都必須執行的代碼,這樣可以保證一些在任何情況下都必須執行代碼的可靠性。

比如,在數據庫查詢異常的時候,應該釋放JDBC連接等等。finally語句先于return語句執行,而不論其先后位置,也不管是否try塊出現異常。

finally語句唯一不被執行的情況是方法執行了System.exit()方法。System.exit()的作用是終止當前正在運行的 Java 虛擬機。

finally語句塊中不能通過給變量賦新值來改變return的返回值,也建議不要在finally塊中使用return語句,沒有意義還容易導致錯誤。

? ? ? ? 最后還應該注意一下異常處理的語法規則:

? ? ? ? 第一、try語句不能單獨存在,可以和catch、finally組成 try...catch...finally、try...catch、try...finally三種結構,catch語句可以有一個或多個,

finally語句最多一個,try、catch、finally這三個關鍵字均不能單獨使用。

? ? ? ? 第二、try、catch、finally三個代碼塊中變量的作用域分別獨立而不能相互訪問。如果要在三個塊中都可以訪問,則需要將變量定義到這些塊的外面。

? ? ? ? 第三、多個catch塊時候,Java虛擬機會匹配其中一個異常類或其子類,就執行這個catch塊,而不會再執行別的catch塊。

? ? ? ? 第四、throw語句后不允許有緊跟其他語句,因為這些沒有機會執行。

? ? ? ? 第五、如果一個方法調用了另外一個聲明拋出異常的方法,那么這個方法要么處理異常,要么聲明拋出。?

? ? ? ? 那怎么判斷一個方法可能會出現異常呢?一般來說,方法聲明的時候用了throws語句,方法中有throw語句,方法調用的方法聲明有throws關鍵字。

? ? ? ? throw和throws關鍵字的區別

? ? ? ? throw用來拋出一個異常,在方法體內。語法格式為:throw 異常對象。

? ? ? ? throws用來聲明方法可能會拋出什么異常,在方法名后,語法格式為:throws 異常類型1,異常類型2...異常類型n。



向AI問一下細節

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

AI

漳浦县| 来宾市| 浦城县| 周宁县| 宾阳县| 福安市| 墨竹工卡县| 古浪县| 成武县| 吉木乃县| 巴里| 台南县| 绥宁县| 迭部县| 金塔县| 辽阳县| 禹城市| 高州市| 金沙县| 堆龙德庆县| 贵溪市| 龙岩市| 昆山市| 天台县| 抚远县| 凤城市| 彰化市| 格尔木市| 广河县| 河池市| 禹城市| 鄂托克旗| 财经| 博罗县| 辉南县| 博乐市| 乐昌市| 绥中县| 三台县| 清河县| 九龙坡区|