中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入淺析Kotlin中的異常

發布時間:2020-11-21 16:51:29 來源:億速云 閱讀:150 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關深入淺析Kotlin中的異常,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Kotlin 基礎教程之異常

概述

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

拋出異常

使用 throw表達式拋出異常:

throw MyException("Hi There!")

捕獲異常

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

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

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

注:

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

自定義異常

在Kotlin標準庫中封裝的異常類型,不可能會預見所有的可能碰見的異常情況,此時自己定義異常,來表示程序中可能出現的特定問題。

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

fun main(args: Array<String>) {

  var b: String&#63; = null

  try {
    b&#63;.length &#63;: 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表達式

在Kotlin中try是一個表達式, 也就是說, 它可以有返回值.

val a: Int&#63; = try { parseInt(input) } catch (e: NumberFormatException) { null }

try表達式的返回值, 要么是try代碼段內最后一個表達式的值,要么是 catch代碼段內最后一個表達式的值. finally代碼段的內容不會影響 try 表達式的結果值.

上述就是小編為大家分享的深入淺析Kotlin中的異常了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

廊坊市| 竹山县| 西华县| 驻马店市| 望城县| 莱芜市| 定州市| 台东县| 丰城市| 娄烦县| 措勤县| 方城县| 浪卡子县| 禄劝| 长乐市| 德兴市| 景洪市| 延川县| 长春市| 绥化市| 延寿县| 大安市| 慈溪市| 东宁县| 广水市| 东兰县| 布尔津县| 拉孜县| 定结县| 沅陵县| 张家界市| 绥德县| 平定县| 车致| 金山区| 蒙阴县| 乌恰县| 赣州市| 孝感市| 溧水县| 陆丰市|