小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【Java】基礎29:出現(xiàn)異常怎么辦?死了都要try

 劉小愛v 2020-05-13

還記得那首火遍大江南北的音樂《死了都要愛》么?在程序員群體中也有一首類似的歌~

歌名:《死了都要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又分有兩大類:

  • ParseException:編譯異常,不解決沒法運行,必須處理。

  • RuntimeException:運行異常,編譯期間可以不處理,但是可能發(fā)生在運行時期。

常見異常有哪些呢?不要被異常長長的一段字符嚇到,其實只要拆開了看還是蠻好理解的。

ArrayIndexOutOfBoundsException

Array:數(shù)組;OutOfBounds:超出了界限。所以是數(shù)組越界異常。

StringIndexOutOfBoundsException

String:字符串;Index:索引;OutOfBounds:超出了界限。所以是字符串越界異常。

IllegalArgumentException

Illegal:非法的;Argument:參數(shù);非法的參數(shù)。所以是非法參數(shù)異常。

NullPointerException

NullPointer:空指針。所以是空指針異常。

二、自定義異常

在開發(fā)過程中,我們要遇到的問題可以說是很多很多的。

那么問題來了,Java里面定義的異常是很有限的,一共就那么些異常,所以有時候就需要我們自定義異常來說明情況。

在Java里面,一切萬物就可成類,自定義異常,就是自己創(chuàng)建一個異常類。

  • 編譯期異常:自定義類并繼承于Exception

  • 運行期異常:自定義類并繼承于RuntimeException。

比如說現(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,怎么辦?

自定義一個異常就好了。

異常里面的底層到底是如何處理的,我們清楚么?

我們不清楚,那不清楚怎么寫?

這個時候,面向對象第二個特性:繼承的作用就出來了。

我不需要知道怎么寫,我只需要繼承某個異常就好了,父類是怎么處理的,我直接使用它的方法就好了。

這就是自定義異常,特別簡單。

總結:

    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多