自學Java第28天:什麼叫異常?
【Java】基礎28:什麼叫異常?
閃退,我們在使用手機或者電腦的過程中,有時會遇到這種情況,這也是使用者最討厭的情況之一。
一般一個開發軟體,如果時常出現閃退的話,使用者體驗是非常差的。
所以要儘可能避免這種情況的發生。
那為什麼會閃退呢?
就是程式它遇到了問題,又沒有及時地處理,便只有崩潰了。而這種情況,便是異常。
在Java世界裡面,異常指的是程式在執行過程中,出現的非正常的情況,最終會導致JVM的非正常停止。
它本身就是Java裡的一個類,最上層的父類是
Throwable
,其下有兩個子類:
Error與Exception
。
一、Error
Error:錯誤的意思,無法透過處理來解決的錯誤。
比如說我建立了一個數組,給它定義的長度為10億,理論上是可以的,Java又沒有要求說陣列長度不能有10億。但是,執行下看看:
OutOfMemoryError:記憶體溢位。
也就是說,我的電腦記憶體不夠用了,因為建立陣列是需要記憶體的,所以它就報出錯誤。
這就好比,我們電腦下了一款非常牛逼的單機遊戲。
執行的時候發現電腦配置不夠,動不動就崩。
電腦又沒法拓展,該怎麼辦?
解決這個問題只有一個方法:換一臺電腦,別無他法。
與之對應的,在Java程式裡面若是遇到這樣的問題,就只能乖乖地修改程式碼了。
二、Exception
我們平時常說的異常指的就是它,因為它是可以透過程式設計師的處理將其解決的,所以接觸的更加多一點。
比較常見的如下:
ArrayIndexOutOfBoundsException:陣列越界異常。
不要看它這麼長好像很複雜的樣子,其實拆開來看單詞都很簡單:Array陣列;index索引;OutOfBounds超出界限;Exception異常。
合在一起就是陣列的索引超出了界限異常,也就是陣列越界異常。
那麼出現了異常Java裡面是如何處理的?
我們舉一個拋繡球的例子來說明下jvm處理異常流程。
好,現在有一個異常,被Java虛擬機器知道了。
這個異常就相當於繡球。
Java虛擬機器就相當於古代拋繡球的女子。
然後就拋繡球,這時候一個人接到了繡球,但是他發現不想娶這個女子,就繼續拋給別人,接到的人也不想娶,就一路拋,最後又拋回到了那個女子的手中。
於是女子非常的生氣,憤怒地罵了幾句就走了。
在Java世界裡面:出現了異常,然後都不處理,一直往前拋,最終拋給了Java虛擬機器。
於是Java虛擬機器非常地生氣,列印錯誤資訊,終止了程式。
程式終止
這件事情在開發過程中是能不出現就不要出現的。
這也很好理解,你想啊,古代女子若是拋繡球都沒人接,多丟人呀,她這輩子大機率不就完了麼?
所以出現了異常要處理異常。
當然,我舉的這個例子並不準確,只是對於剛接觸Java沒多久的人來說,可能更好理解。
三、異常的處理
一定要搞清楚,程式設計師處理異常,不是說這種型別的問題不會出現了,而是說出現了問題要保證程式不能崩潰。
因為使用者是不確定的,就比如說使用者銀行卡里只有10塊錢,它提現時硬是要輸入10000塊,這就會出現異常。
如果是Java虛擬機器來處理,程式就直接崩潰了呀,這樣顯然是不行的。
而程式設計師要將其處理成:我們丟擲資訊,提示使用者:“卡內餘額不足”,保證程式不會停止執行。
這就是異常的處理,不是說問題再也不會出現了,而是說出現了問題要保證程式不能崩潰,並提示使用者。
那麼如何處理異常?
方式一:throw
因為Java裡面異常本身就是一個類,所以建立對應的異常物件,再丟擲說明。
方式二:throws
關鍵字
throws
運用於方法上,宣告方法內部可能產生異常,用於表示當前方法不處理異常,而是提醒該方法的呼叫者來處理異常(丟擲異常)。
throws寫在方法名後面,後面可以接多個異常,用逗號隔開。
throws本身並沒有處理異常
,而是提示讓方法呼叫者我這可能有異常,誰呼叫我得處理,並且也不是說一定就會出現異常,也有可能沒有。
throws這個關鍵字就是警示提醒的作用,並沒有處理異常。
方式三:try…catch
真正處理異常了的其實就兩種方式:
throw+建立異常物件,並說明。
try…catch處理異常。
try:可能會產生異常的程式碼。
catch:用來進行某種異常的捕獲,若是出現了括號中的異常,就丟擲異常並描述資訊,可以多個catch
finally:無論異常是否發生,都會執行。
以上就是對於異常的一些基本說明,暫時先就到這兒,明天再繼續深入研究異常。
總結: