新聞中心
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)深入淺析Kotlin中的異常,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)建站始終堅(jiān)持【策劃先行,效果至上】的經(jīng)營理念,通過多達(dá)十余年累計(jì)超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的全網(wǎng)營銷解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:自上料攪拌車等企業(yè),備受客戶表揚(yáng)。
Kotlin 基礎(chǔ)教程之異常
概述
在Kotlin-null的處理里提到的NPE,它就是一個(gè)異常。而,異常是程序運(yùn)行過程中出現(xiàn)的錯(cuò)誤。在Kotlin中,所有的異常都繼承于Throwable。對(duì)于每一個(gè)異常而言,它不僅僅包括異常的信息,還可以選擇性包括異常的原因,而其原因也是一個(gè)異常的實(shí)例。
拋出異常
使用 throw表達(dá)式拋出異常:
throw MyException("Hi There!")
捕獲異常
如果在函數(shù)內(nèi)部拋出了異常(或者在函數(shù)內(nèi)部調(diào)用的其他函數(shù)拋出了異常),這個(gè)函數(shù)將在拋出異常的地方結(jié)束。如果不希望函數(shù)結(jié)束,此時(shí)就必須捕獲這個(gè)被拋出的異常并處理這個(gè)異常。
在Kotlin中,要捕獲異常, 可以使用 try 表達(dá)式:
try { // 某些代碼 } catch (e: SomeException) { // 異常處理 } finally { // 可選的 finally 代碼段 }
- try語句塊:表示要嘗試運(yùn)行代碼,try語句塊中代碼受異常監(jiān)控,其中代碼發(fā)生異常時(shí),會(huì)拋出異常對(duì)象。
- catch語句塊:會(huì)捕獲try代碼塊中發(fā)生的異常并在其代碼塊中做異常處理,catch語句帶一個(gè)Throwable類型的參數(shù),表示可捕獲異常類型。當(dāng)try中出現(xiàn)異常時(shí),catch會(huì)捕獲到發(fā)生的異常,并和自己的異常類型匹配, 若匹配,則執(zhí)行catch塊中代碼,并將catch塊參數(shù)指向所拋的異常對(duì)象。catch語句可以有多個(gè), 用來匹配多個(gè)中的一個(gè)異常,一旦匹上配后,就不再嘗試匹配別的catch塊了。 通過異常對(duì)象可以獲取異常發(fā)生時(shí)完整的JVM堆棧信息,以及異常信息和異常發(fā)生的原因等。
- finally語句塊:緊跟catch語句后的語句塊,這個(gè)語句塊總是會(huì)在方法返回前執(zhí)行,而不管是否try語句塊是否發(fā)生異常。并且這個(gè)語句塊總是在方法返回前執(zhí)行。 目的是給程序一個(gè)補(bǔ)救的機(jī)會(huì)。這樣做也體現(xiàn)了Java語言的健壯性。
注:
- try、catch、finally三個(gè)語句塊均不能單獨(dú)使用,三者可以組成 try…catch…finally、try…catch、try…finally三種結(jié)構(gòu),catch語句可以有一個(gè)或多個(gè),finally語句最多一個(gè)。
- try、catch、finally三個(gè)代碼塊中變量的作用域?yàn)榇a塊內(nèi)部,分別獨(dú)立而不能相互訪問。如果要在三個(gè)塊中都可以訪問,則需要將變量定義到這些塊的外面。
- 多個(gè)catch塊時(shí)候,只會(huì)匹配其中一個(gè)異常類并執(zhí)行catch塊代碼,而不會(huì)再執(zhí)行別的catch塊,并且匹配catch語句的順序是由上到下。
- try表達(dá)式中可以有0個(gè)或多個(gè)catch代碼段. finally 代碼段可以省略. 但是,catch或 finally代碼段至少要出現(xiàn)一個(gè)與try配對(duì)出現(xiàn)。
自定義異常
在Kotlin標(biāo)準(zhǔn)庫中封裝的異常類型,不可能會(huì)預(yù)見所有的可能碰見的異常情況,此時(shí)自己定義異常,來表示程序中可能出現(xiàn)的特定問題。
如果想自定義異常,就必須繼承現(xiàn)有的異常類,一般都繼承其異常情況相似的類,建立異常類型最簡單的方法就是使用編輯器產(chǎn)生默認(rèn)的構(gòu)造方法,這樣簡單而有效。
fun main(args: Array) { var b: String? = null try { b?.length ?: throw MyExcepttion("b不能為空") } catch (ex: MyExcepttion) { println("ex: ${ex.message}") } catch (npe: NullPointerException) { println("npe: ${npe.message}") } finally { println("finally") } } public class MyExcepttion(override val message: String) : Throwable(){ } // Log ex: b不能為空 finally
try表達(dá)式
在Kotlin中try是一個(gè)表達(dá)式, 也就是說, 它可以有返回值.
val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }
try表達(dá)式的返回值, 要么是try代碼段內(nèi)最后一個(gè)表達(dá)式的值,要么是 catch代碼段內(nèi)最后一個(gè)表達(dá)式的值. finally代碼段的內(nèi)容不會(huì)影響 try 表達(dá)式的結(jié)果值.
上述就是小編為大家分享的深入淺析Kotlin中的異常了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當(dāng)前文章:深入淺析Kotlin中的異常
URL地址:http://fisionsoft.com.cn/article/jppphs.html