java中的throw、throws和try catch淺析


今天在公司和同事聊天的時候,突然發現自己對java中的throw、throws和try catch的作用理解不夠准確,在網上查了查,在此大概梳理一下。

throw用於拋出異常,例如

throw new NullPointerException();

就是拋出一個空指針異常。異常拋出后程序終止,除非用try catch包圍起來,會在執行完catch和finally塊中的代碼后,繼續執行之后的代碼。這也是try catch的一個作用,即防止程序崩潰。

throws用於聲明一個方法可能拋出某種異常,提醒調用者處理。例如

void test() throws NullPointerException {

}

意思是這個test方法可能會拋出空指針異常,調用者可能需要處理。為什么說可能需要處理,因為有些異常不處理也可通過編譯,有些則不行。需要處理的異常為非運行時異常,如IOException、SQLException和自定義Exception;不需要處理的異常為運行時異常,如NullPointerException、IndexOutOfBoundsException等。前者必須try catch處理,否則無法通過編譯,后者則不需要。

對於運行時異常,雖然編譯器不強制要求處理,但是在不處理的情況下,異常會一直向上拋出,直至最上層為止。多線程最后會由Thread.run()拋出,單線程則由main()拋出,然后程序終止。

try catch就是處理異常的方式。需要明確的一點是,即便沒有try catch(准確說是沒有catch塊中的e.printStackTrace()或別的打印異常信息語句),控制台還是會打印異常的堆棧信息。反而如果有try catch,但是catch塊中沒有打印異常信息的話,控制台中就會空空如也。這也是許多規范中嚴禁catch塊中什么都不做的原因,至少應該在日志中記錄異常信息,因為try catch相當於接管了java本身的異常處理,雖然這使得我們可以在發生異常時做很多事,但我們若是什么都不做的話,java也不會重新接管。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM