Android自定義拋出異常的方法詳解
前言
在android開(kāi)發(fā)過(guò)程中,我們經(jīng)常遇到異常的問(wèn)題,崩潰拋出異常的時(shí)候,是非常令人煩悶的。但是異常有一個(gè)好處,使得app能在編譯的時(shí)候給我們提供一些bug信息,有時(shí)可能比較模糊,有時(shí)可能很精準(zhǔn),甚至提示報(bào)錯(cuò)行。基于這一點(diǎn),今天我們就來(lái)講講android中的異常吧。
今天要講的內(nèi)容:
- throw 和 throws
- 異常類型
- 仿寫(xiě)異常及其好處
一. throw 和 throws
異常通常的處理方式有 throw/throws 以及 try-catch 兩種。今天我們主要講解throw/throws這一類的處理。
- throw:拋出異常,一般是一個(gè)具體的異常。放置在方法體內(nèi),當(dāng)代碼執(zhí)行此行并拋出一個(gè)具體的異常以后,此異常下面的邏輯代碼均不會(huì)執(zhí)行。
- throws:拋出異常的聲明,一般放在方法頭,表示此方法的執(zhí)行可能會(huì)引起某個(gè)異常,或某幾個(gè)異常,throws 后面可以聲明多個(gè)異常,如 :
public static void function1() throws Exception1, Exception2, Exception3{ }
而 throws引起的異常,一般由調(diào)用此方法的方法去處理。
二. 異常類型
java開(kāi)發(fā)異常大致分為三種:
- java.lang.Error
- java.lang.Exception
- java.lang.RuntimeException
這三個(gè)異常類都繼承于他們的父類 Throwable,其中 Error 和 Exception是 Throwable 的兩大子類。Error 一般是系統(tǒng)錯(cuò)誤,我們不予討論,一般我們程序出現(xiàn)bug都是屬于Exception類,RuntimeException 是 Exception的一個(gè)子類。今天我要介紹的就是 RuntimeException 的幾個(gè)常見(jiàn)子類。
2.1 java.lang.NullPointerException
空指針異常,一般是對(duì)象未創(chuàng)建或者不存在造成的。
2.2 ava.lang.ClassNotFoundException
類異常,一般是類不存在,排查的時(shí)候注意是不是類名稱寫(xiě)錯(cuò)或者路徑搞錯(cuò)了
2.3 java.lang.ArrayIndexOutOfBoundsException
下標(biāo)越界異常,一般出現(xiàn)在數(shù)組或集合的操作過(guò)程中
2.4 java.lang.IllegalArgumentException
方法參數(shù)錯(cuò)誤
2.5 java.lang.IllegalAccessException
沒(méi)有訪問(wèn)權(quán)限,一般是類的權(quán)限訪問(wèn)出問(wèn)題了
2.6 ArithmeticExecption
算術(shù)異常
2.7 ClassCastException
類型強(qiáng)轉(zhuǎn)異常
2.8 NegativeArrayException
數(shù)組負(fù)下標(biāo)異常
2.9 SecturityException
違背安全原則異常
2.10 EOFException
文件已結(jié)束異常
2.11 FileNotFoundException
文件未找到異常
2.12 NumberFormatException
字符串轉(zhuǎn)換為數(shù)字異常
2.13 SQLException
操作數(shù)據(jù)庫(kù)異常
2.14 IOException
輸入輸出異常
2.15 NoSuchMethodException
方法未找到異常
2.16 NoSuchFieldException
屬性不存在異常
2.17 RuntimeException
運(yùn)行時(shí)異常
2.18 TypeNotPresentException
類型不存在異常
當(dāng)然,其實(shí)還有很多其他異常,這里就不一一列舉了。
三. 仿寫(xiě)異常及其好處
看了怎么多的異常,那怎么仿寫(xiě)一個(gè)異常呢?下面給出一個(gè)例子:
public GestureHelper setPointCount(int pointCount){ if(pointCount<=0){ throw new SecurityException("====pointCount 請(qǐng)輸入大于零的值======="); } return GestureHelper.this; }
這是我代碼中的一個(gè)方法,要求是輸入的 pointCount 要大于零,當(dāng)輸入的值不滿足條件的時(shí)候,會(huì)拋出不安全異常,然后出現(xiàn)括號(hào)中提示,類似如下:
這樣的話,仿寫(xiě)異常的好處立見(jiàn)分曉了,就是當(dāng)我們?cè)趯?xiě)一個(gè)工具類,傳入?yún)?shù)不符合條件的話,在運(yùn)行期就能幫我們檢測(cè)自己的代碼中是否有不規(guī)則的東西,能幫我們檢測(cè)代碼的質(zhì)量。
所以,這無(wú)疑是極好的!
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Android自定義View實(shí)現(xiàn)BMI指數(shù)條
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)BMI指數(shù)條,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06Android自定義View實(shí)現(xiàn)遙控器按鈕
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)遙控器按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08Android使用Jetpack WindowManager開(kāi)發(fā)可折疊設(shè)備(過(guò)程分享)
這篇文章主要介紹了Android使用Jetpack WindowManager開(kāi)發(fā)可折疊設(shè)備,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11android開(kāi)機(jī)自動(dòng)啟動(dòng)app的解決方法
這篇文章主要為大家詳細(xì)介紹了android開(kāi)機(jī)自動(dòng)啟動(dòng)app的解決方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Android性能調(diào)優(yōu)利器StrictMode應(yīng)用分析
StrictMode意思為嚴(yán)格模式,是用來(lái)檢測(cè)程序中違例情況的開(kāi)發(fā)者工具。最常用的場(chǎng)景就是檢測(cè)主線程中本地磁盤和網(wǎng)絡(luò)讀寫(xiě)等耗時(shí)的操作。這篇文章給大家介紹Android性能調(diào)優(yōu)利器StrictMode應(yīng)用分析,感興趣的朋友一起看看吧2018-01-01使用Flutter實(shí)現(xiàn)一個(gè)走馬燈布局的示例代碼
這篇文章主要介紹了使用 Flutter 實(shí)現(xiàn)一個(gè)走馬燈布局的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Android控件PullRefreshViewGroup實(shí)現(xiàn)下拉刷新和上拉加載
這篇文章主要為大家詳細(xì)介紹了Android控件PullRefreshViewGroup實(shí)現(xiàn)下拉刷新和上拉加載效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03