異常捕捉陷阱

2021-06-07 17:53:35 字數 1123 閱讀 5327

finally執行規則:

eg1:    tryfinally

不論try塊正常結束或者非正常結束,finally的確會執行;但是上述例子不會輸出finally塊內容,因為system.exit(0)根本沒有結束執行過程,system.exit(0)將停止當前執行緒和其他當場死亡的執行緒,finally不能使已經停止的執行緒就行執行,所以system.exit(0)後finally塊不會被執行。

system.exit(0)呼叫時,虛擬機器執行兩項清理工作:

(1)執行系統中註冊的所有關閉鉤子;

(2)如果系統呼叫了system.runfinalizeronexit(true);jvm會對沒有結束的物件呼叫finalizer。

第二種是極度危險的。

第一種是安全的操作,程式可以將關閉資源的操作註冊成為關閉鉤子,jvm推出前會被呼叫。

runtime.getruntime().addshutdownhook(

new thread()

}) ;

當try塊執行到return或者throw時,不會立刻停止當前方法,而是轉去尋找finally塊,如果沒有finally塊,返回相應值;如果有finally塊,系統立刻開始finally塊,,當finally塊執行完後跳回return語句導致方法結束。如果finally已經結束方法,系統將不會跳回去執行try、catch塊裡面全部**

catch塊用法:

try...catch語句的多個catcj塊應該先捕獲子類異常(子類代表範圍小),後捕獲父類異常(父類代表範圍大),否則編譯器會提示編譯錯誤。千萬不可以使用異常來進行流程控制(難以閱讀,速度很慢)。

異常分為runtime異常和checked異常:當catch試圖捕獲checked異常時,那麼對應的try塊必須可能丟擲checked異常或者其子類,否則編譯錯誤(**可能丟擲checked異常,那麼其中呼叫的方法或者構造器宣告了該checked異常,而且程式必須處理該異常,或者丟擲);對應runtime異常,只要願意,程式可以在任何時候使用cacth塊來捕捉執行時異常。

子類重寫父類方法,不能宣告丟擲比父類方法型別更多,範圍更大的異常;也就是說,子類重寫父類方法,子類方法只能宣告丟擲父類方法所宣告丟擲異常的子類。

如果同時實現多個介面的同乙個方法,只能宣告丟擲實現介面方法宣告異常的交集。

捕捉異常try catch

1,當 在執行時可能出現異常時用try catch 捕捉異常,這樣程式出現異常不會立即跳出程式,可以經過處理後讓程式繼續執行或者跳出。例如 string a 12211a try catch exception e 2,還有很多其他異常,列舉一些常見異常 算術異常類 arithmeticexecpt...

關於異常捕捉

關與異常捕捉這個問題 首先我們要區分什麼時候用try catch 什麼時候用throw 什麼時候用throws,1.如果你需要抓取具體的異常那麼需要對 塊用try catch 2.如果你將抓取的異常丟擲到控制台或日誌中就需要用到throw 注意這個throw一般會寫在catch 塊裡,還有就是如果c...

14 捕捉異常

在程式開發時候,經常會碰到執行錯誤,那麼便需要對程式丟擲的異常進行捕獲,並且針對這種錯誤寫出相應的解決 以此來保證開發出的產品穩定高效執行.捕獲異常的基礎語法 try 想要執行的 except 針對性的錯誤處理 例子 try num int input 輸入整數 except print 你輸入的不...