Kotlin編碼竅門(mén)之異常(Exceptions)

異常類(lèi)(Exception Classes)

Kotlin中所有的異常類(lèi)都是Throwable的子類(lèi)。每個(gè)異常都有消息、堆?;厮菪畔⒑涂蛇x的原因。

要拋出一個(gè)異常對(duì)象,使用throw表達(dá)式:

throw MyException("Hi There!")

為了捕獲一個(gè)異常,使用try表達(dá)式:

try {
    // some code
}
catch (e: SomeException) {
    // handler
}
finally {
    // optional finally block
}

可以有0到多個(gè)catch塊,finally塊可以省略。但是catch塊和finally塊至少應(yīng)該存在一個(gè)。

try是一個(gè)表達(dá)式(Try is an expression)

try是一個(gè)表達(dá)式,也就是說(shuō),它可以有一個(gè)返回值:

val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }

try表達(dá)式的返回值要么是try塊的最后一個(gè)表達(dá)式,也哦么是catch塊的最后一個(gè)表達(dá)式。finally塊對(duì)try表達(dá)式的結(jié)果沒(méi)有影響。

檢查異常(Checked Exceptions)

Kotlin沒(méi)有檢查異常(編譯時(shí)異常)。原因有很多,我們僅提供一個(gè)簡(jiǎn)單的例子。例子省略...

Nothing類(lèi)型(The Nothing type)

在Kotlin中,throw是一個(gè)表達(dá)式,因此可以將其作為Elvis表達(dá)式的一部分:

val s = person.name ?: throw IllegalArgumentException("Name required")

throw表達(dá)式的類(lèi)型是Nothing。該類(lèi)型沒(méi)有值,僅用于標(biāo)記該代碼位置永遠(yuǎn)不可能到達(dá)。在你的代碼中,你可以使用Nothing來(lái)標(biāo)記一個(gè)永遠(yuǎn)不會(huì)返回的函數(shù):

fun fail(message: String): Nothing {
    throw IllegalArgumentException(message)
}

當(dāng)你調(diào)用該函數(shù)的時(shí)候,編譯器將知道執(zhí)行不會(huì)超出調(diào)用:

val s = person.name ?: fail("Name required")
println(s)     // 's' is known to be initialized at this point

Java互操作性

參見(jiàn)Java互操作性章節(jié)...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 人生苦多,快來(lái) Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類(lèi)型編程...
    任半生囂狂閱讀 26,688評(píng)論 9 118
  • Kotlin系統(tǒng)化學(xué)習(xí)-20170823文章中有大部分內(nèi)容是借鑒《Kotlin實(shí)戰(zhàn)》中文版,特此注明一下。 Kot...
    ChenHaHa哈哈閱讀 1,870評(píng)論 2 10
  • 這章將講述聲明函數(shù)、變量、類(lèi)、枚舉和屬性Kotlin的控制結(jié)構(gòu)智能強(qiáng)轉(zhuǎn)拋和處理異常 1 基本元素: 函數(shù)和變量 K...
    tigershin閱讀 1,459評(píng)論 1 1
  • 文/生活美學(xué)智慧 凱利?麥格尼格爾是一位健康心理學(xué)博士,致力于幫助人們做出積極的改變。本書(shū)吸收了最新的經(jīng)濟(jì)學(xué)、心理...
    美遇生活美學(xué)閱讀 533評(píng)論 0 1
  • 像飛蛾一樣活著, 每一天, 變成光, 慢慢死去, 經(jīng)驗(yàn)著生活, 意識(shí)被擠壓, 燃燒的回憶, 掙扎著, 脫去外衣, ...
    c93閱讀 193評(píng)論 0 0

友情鏈接更多精彩內(nèi)容