關於異常throws throw try

2021-09-17 03:18:50 字數 1273 閱讀 1097

throws是宣告異常,在方法頭上宣告(***exception異常類),呼叫該方法時,要麼跟著宣告相同的異常(或大於他的異常),要麼就try處理異常。

throw是在方法體內,丟擲異常(異常物件 new ***exception();),一旦丟擲,方法停止執行。但是呼叫該方法的呼叫者,不用宣告或處理任何異常。是方法體內的語句,跟呼叫者沒有關係,呼叫者只看方法頭上有沒有宣告異常。

try catch也就是處理異常,列印異常。呼叫該方法的呼叫者,不用宣告或處理任何異常。如果try{}中的**有異常,那麼就不執行其中的**,去執行catch中的**,只要catch沒有throw,那麼**將繼續遠行,毫無影響。

try之後的兩個大坑:

1,關於捕獲異常:

語句:p.***method();

你想要try它,而這個方法上沒有宣告異常,也就是你try不try它都不會報紅。但你就是想try,那try的時候只能去catch非自定義的異常,要是想捕獲自定義的,那麼你只能去***method()這個方法頭上去宣告,要麼編譯都不通過。

2,關於finally:

你用了try+catch+finally 這樣的格式,catch和finally中都寫了return語句,而恰好捕獲到異常了,執行到了catch中的**,這時的返回值應該是哪乙個return?答案:返回finally中的。finally中寫的是最終要執行的**,並且一定會執行,所以在遇到return語句的時候,系統會先去執行finally中的**,再回來return終止。而在剛剛那種情況下,在finally中遇到了終止,很不幸,回不來了,直接終止就對了。同理,遇到try+catch+finally 之外的return,也一樣。總之,不要跟finally中的return語句較量。

補充:

如果你在方法體{}1⃣️中拋異常,在不宣告異常的情況下,只能丟擲執行時異常runtimeexception,若是其他異常或者自定義異常,則必須在方法頭上宣告該異常,或或者比他大的異常。之前也說了,2⃣️對異常的處理(trycatch),是對方法頭1⃣️上宣告的異常感知的,(也就是在1⃣️方法頭上宣告的異常,是不得不處理的,一定會被處理,不會被無視),所以說2⃣️處理異常時,雖然可以捕獲所有異常,但是我在可能有異常的方法1⃣️中,丟擲了一種非執行時異常,這是他是不確定,到底會不會被處理的(因為是需要被處理的),所以必須要在方法頭上宣告,確保一定會被處理。 所以之前的說法,說我們不能捕獲沒有宣告的自定義異常,跟這個說法不衝突,乙個是針對方法1⃣️,乙個是針對方法2⃣️

關於異常和異常捕獲。

異常即非正常狀態,主要包括書寫或語法上的錯誤導致直譯器無法正常執行。異常描述 importerror 匯入模組 物件失敗 indexerror 序列中沒有此索引 index keyerror 對映中沒有這個鍵 nameerror 未宣告 初始化物件 沒有屬性 syntaxerror python 語...

關於異常捕獲

你可以查一下你的sdk,裡面有很多的exception的定義,其基類其實都是system.exception一樣。但system.exception只提供了一些一般異常的處理。更多的需要專業的來處理。比如找不到檔案,你必須捕捉system.io.filenotfoundexception這個異常。在...

關於Java異常

下圖是異常的種類 1 在執行時產生異常就會丟擲乙個異常。2 可以用try catch 捕獲異常,之後系統會處理系統有能力處理的異常,這時try catch 捕獲異常之後 就可執行了。程式設計師可以在catch 中的大括號裡輸出異常資訊或處理異常 也可以不處理,系統會處理系統能處理的異常 3 當 出現...