最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin 基礎(chǔ)教程之異常

 更新時間:2017年06月05日 10:58:06   作者:行云間  
這篇文章主要介紹了Kotlin 基礎(chǔ)教程之異常的相關(guān)資料,需要的朋友可以參考下

Kotlin 基礎(chǔ)教程之異常

概述

在Kotlin-null的處理里提到的NPE,它就是一個異常。而,異常是程序運(yùn)行過程中出現(xiàn)的錯誤。在Kotlin中,所有的異常都繼承于Throwable。對于每一個異常而言,它不僅僅包括異常的信息,還可以選擇性包括異常的原因,而其原因也是一個異常的實例。

拋出異常

使用 throw表達(dá)式拋出異常:

throw MyException("Hi There!")

捕獲異常

如果在函數(shù)內(nèi)部拋出了異常(或者在函數(shù)內(nèi)部調(diào)用的其他函數(shù)拋出了異常),這個函數(shù)將在拋出異常的地方結(jié)束。如果不希望函數(shù)結(jié)束,此時就必須捕獲這個被拋出的異常并處理這個異常。

在Kotlin中,要捕獲異常, 可以使用 try 表達(dá)式:

try {
  // 某些代碼
}
catch (e: SomeException) {
  // 異常處理
}
finally {
  // 可選的 finally 代碼段
}
  1. try語句塊:表示要嘗試運(yùn)行代碼,try語句塊中代碼受異常監(jiān)控,其中代碼發(fā)生異常時,會拋出異常對象。
  2. catch語句塊:會捕獲try代碼塊中發(fā)生的異常并在其代碼塊中做異常處理,catch語句帶一個Throwable類型的參數(shù),表示可捕獲異常類型。當(dāng)try中出現(xiàn)異常時,catch會捕獲到發(fā)生的異常,并和自己的異常類型匹配, 若匹配,則執(zhí)行catch塊中代碼,并將catch塊參數(shù)指向所拋的異常對象。catch語句可以有多個, 用來匹配多個中的一個異常,一旦匹上配后,就不再嘗試匹配別的catch塊了。 通過異常對象可以獲取異常發(fā)生時完整的JVM堆棧信息,以及異常信息和異常發(fā)生的原因等。
  3. finally語句塊:緊跟catch語句后的語句塊,這個語句塊總是會在方法返回前執(zhí)行,而不管是否try語句塊是否發(fā)生異常。并且這個語句塊總是在方法返回前執(zhí)行。 目的是給程序一個補(bǔ)救的機(jī)會。這樣做也體現(xiàn)了Java語言的健壯性。

注:

  1. try、catch、finally三個語句塊均不能單獨(dú)使用,三者可以組成 try…catch…finally、try…catch、try…finally三種結(jié)構(gòu),catch語句可以有一個或多個,finally語句最多一個。
  2. try、catch、finally三個代碼塊中變量的作用域為代碼塊內(nèi)部,分別獨(dú)立而不能相互訪問。如果要在三個塊中都可以訪問,則需要將變量定義到這些塊的外面。
  3. 多個catch塊時候,只會匹配其中一個異常類并執(zhí)行catch塊代碼,而不會再執(zhí)行別的catch塊,并且匹配catch語句的順序是由上到下。
  4. try表達(dá)式中可以有0個或多個catch代碼段. finally 代碼段可以省略. 但是,catch或 finally代碼段至少要出現(xiàn)一個與try配對出現(xiàn)。

自定義異常

在Kotlin標(biāo)準(zhǔn)庫中封裝的異常類型,不可能會預(yù)見所有的可能碰見的異常情況,此時自己定義異常,來表示程序中可能出現(xiàn)的特定問題。

如果想自定義異常,就必須繼承現(xiàn)有的異常類,一般都繼承其異常情況相似的類,建立異常類型最簡單的方法就是使用編輯器產(chǎn)生默認(rèn)的構(gòu)造方法,這樣簡單而有效。

fun main(args: Array<String>) {

  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是一個表達(dá)式, 也就是說, 它可以有返回值.

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

try表達(dá)式的返回值, 要么是try代碼段內(nèi)最后一個表達(dá)式的值,要么是 catch代碼段內(nèi)最后一個表達(dá)式的值. finally代碼段的內(nèi)容不會影響 try 表達(dá)式的結(jié)果值.

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

最新評論

定远县| 伊春市| 清水县| 澎湖县| 民权县| 毕节市| 东台市| 怀远县| 台中县| 大田县| 双牌县| 南京市| 团风县| 泽普县| 栖霞市| 赤峰市| 白水县| 社旗县| 微山县| 沅陵县| 曲周县| 海宁市| 北海市| 双牌县| 霞浦县| 溧阳市| 布拖县| 冷水江市| 乐亭县| 扬中市| 黑水县| 卫辉市| 锦州市| 白银市| 陇西县| 大厂| 中宁县| 麻江县| 桦甸市| 塘沽区| 连南|