|
還記得那首火遍大江南北的音樂《死了都要愛》么?在程序員群體中也有一首類似的歌~ 歌名:《死了都要try》 歌手:程序猿 死了都要try 不抓住異常不痛快 BUG多深,只有這樣,才不用重來 死了都要try 不catch夠我不痛快 程序毀滅throw還在 把每天,當作程序來更改 一改一天,都累到淚水掉下來 不理會,老板是看好或看壞 只要有工資,來還貸 改,不是需求做的太壞 那是客戶想要什么,自己都不明白 忍受現(xiàn)在,自己一生都還不完的貸 很多模塊,不能完成,我還得改 死了都要try 不catch夠我不痛快 程序毀滅throw還在 不得不說,這首歌的歌詞簡直不要太真實了,說出了廣大程序員同胞的心聲。 這首歌在說啥? 其實就是在說異常,其中里面的try,catch,throw,便是3個關鍵字。 一、異常的回顧回顧下抓取異常的方式: 非常地好理解: try:嘗試的意思,也就是說這塊代碼可能有問題,我就嘗試著把它用大括號框起來,以防它出錯。 catch:抓取的意思,我先指定一個異常,如果try里面的代碼出現(xiàn)了這個異常,就把它抓取了。 抓取有什么用?能保證程序不會蹦。 catch可以有多個,但是只能抓取對應的異常,數(shù)組越界異常只能用來抓取數(shù)組越界異常,出現(xiàn)其他的異常它就沒法管了。 這就好比,這個國家的陸軍只能管陸軍,空軍只能管空軍一樣。但不管是陸軍還是空軍,國家都可以管。 所以Eception,無論是數(shù)組越界異常,還是字符串越界異常,它都可以管。 finally:無論怎么樣,都會運行。 再回顧下異常里的繼承體系: 和程序員打交道的主要是Exception。 Exception又分有兩大類:
常見異常有哪些呢?不要被異常長長的一段字符嚇到,其實只要拆開了看還是蠻好理解的。 ArrayIndexOutOfBoundsException Array:數(shù)組;OutOfBounds:超出了界限。所以是數(shù)組越界異常。 StringIndexOutOfBoundsException String:字符串;Index:索引;OutOfBounds:超出了界限。所以是字符串越界異常。 IllegalArgumentException Illegal:非法的;Argument:參數(shù);非法的參數(shù)。所以是非法參數(shù)異常。 NullPointerException NullPointer:空指針。所以是空指針異常。 二、自定義異常在開發(fā)過程中,我們要遇到的問題可以說是很多很多的。 那么問題來了,Java里面定義的異常是很有限的,一共就那么些異常,所以有時候就需要我們自定義異常來說明情況。 在Java里面,一切萬物就可成類,自定義異常,就是自己創(chuàng)建一個異常類。
比如說現(xiàn)在有一個類Person,它有姓名和年齡兩個屬性: 現(xiàn)在有個用戶填年齡時就是要填-18歲,怎么辦? 很顯然,年齡是不可能-18歲的,如果類的成員變量沒有封裝,用戶是直接可以隨便修改的,顯然這樣是不行的,所以封裝的作用就出來了。 什么叫封裝? 通俗點說就是:用戶沒法直接修改屬性了,而是通過方法修改,這樣的話,我就可以在方法里面加一個判斷,你若是輸入的數(shù)據(jù)不合適,你就沒法修改屬性成功。 這就是封裝的意義。 好,現(xiàn)在我們在方法里,設定一個年齡規(guī)則,用戶輸入的數(shù)字若是不在這個范圍里面,就會拋出異常,并且提醒用戶。 好,現(xiàn)在問題又來了,產(chǎn)品經(jīng)理看了之后,覺得你寫的這個RuntimeException它看不懂,他要年齡異常(ArgException),這樣更加地直觀。 可是Api里面又沒有ArgException這個異常。 要知道產(chǎn)品經(jīng)理是會對程序員提各種各樣的需求的,原則上程序員是需要滿足產(chǎn)品經(jīng)理提的要求的,但是有些產(chǎn)品經(jīng)理又不怎么懂技術,就會亂提要求。 我記得有一年平安的產(chǎn)品經(jīng)理就和程序員發(fā)生了矛盾,雙方大打出手,還上了熱搜,鬧得沸沸揚揚的。 當時產(chǎn)品經(jīng)理提的要求好像是: 用戶使用平安APP時,APP界面顏色要和用戶的手機殼顏色一樣。 當時程序員就覺得,這怎么弄?沒法做,產(chǎn)品經(jīng)理又要做,于是兩個人就打起來了。 當然,這個需求能否通過技術上的手段解決我也不清楚。 回到我們自定義異常的問題,產(chǎn)品經(jīng)理說要ArgException,怎么辦? 自定義一個異常就好了。 異常里面的底層到底是如何處理的,我們清楚么? 我們不清楚,那不清楚怎么寫? 這個時候,面向對象第二個特性:繼承的作用就出來了。 我不需要知道怎么寫,我只需要繼承某個異常就好了,父類是怎么處理的,我直接使用它的方法就好了。 這就是自定義異常,特別簡單。 總結: |
|
|
來自: 劉小愛v > 《Java學習筆記》