java異常處理

2021-08-21 17:16:51 字數 1636 閱讀 8264

異常類分為以下:

說到這裡,其實我到異常的處理還是一知半解的,直到我遇到這樣的一道題:

public abstract class test 

public static int beforefinally()finally

}}//輸出結果為1

從結果上看,貌似`finally` 裡的語句是在`return` 之後執行的,其實不然,實際上`finally` 裡的語句是在`return` 之前執行的。那麼問題來了,既然是在之前執行,那為什麼`a` 的值沒有被覆蓋了?

實際過程是這樣的:當程式執行到try{}語句中的return方法時,它會幹這麼一件事,將要返回的結果儲存到乙個臨時棧中,然後程式不會立即返回,而是去執行finally{}中的程式, 在執行`a = 2`時,程式僅僅是覆蓋了a的值,但不會去更新臨時棧中的那個要返回的值 。執行完之後,就會通知主程式「finally的程式執行完畢,可以請求返回了」,這時,就會將臨時棧中的值取出來返回。這下應該清楚了,要返回的值是儲存至臨時棧中的。而且`finally` 裡的語句是在`return` 之前執行的。

再來看乙個例子,稍微改下上面的程式:

public abstract class test 

public static int beforefinally()finally

}}//輸入2

這裡為什麼返回的又是2呢?因為finally{}裡也有乙個return,那麼在執行這個return時,就會更新臨時棧中的值。同樣,在執行完finally中的return之後,就會通知主程式請求返回了,即將臨時棧中的值取出來返回,此時程式結束不會再執行try{}中的return了,故返回值是2。

return的兩個作用:1.返回臨時棧中的值,2.結束執行,不再執行後面的**。

第一種方式是自己處理異常,第二種方式是把異常丟擲,交給呼叫它的程式去處理。

**演示兩種處理方式:

public class listofnumbers 

} // 將list儲存到outfile.txt

public void writelist()

} catch (filenotfoundexception e) catch (arrayindexoutofbound***ception e) finally }}

class test

}

class listofnumbersdeclared 

} // 宣告異常丟擲

public void writelist() throws ioexception, arrayindexoutofbound***ception

out.close(); }}

class testcatch(exception e)

system.out.println("無異常");}}

Java異常處理

package test public class testexception boolean testex throws exception catch exception e finally boolean testex1 throws exception system.out.println ...

java異常處理

在自動化指令碼編寫的過程中,task層的所有方法都要throws exception 異常處理 程式執行過程中,可能會出現異常情況,比如被0除 對負數計算平方根等,還有可能會出現致命的錯誤,比如記憶體不足,磁碟損害無法讀取檔案等,對於異常和錯誤情況的處理,統稱為異常處理。在自動化中,有可能是找不到某...

Java異常處理

注意 1.當程式可能出現多種異常,而且又要為這些異常一一處理時,後面依次列寫catch語句塊 2.但所列寫的catch應該滿足從子類到父類的異常處理,如上面,第一和二兩個異常都是exception的子類 3.finally語句跟在catch語句後面,用來實行一些出現異常後要進行的處理 4.處理執行時...