欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

概述

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

注:

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

自定義異常

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

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

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

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é)果值.

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

相關(guān)文章

  • Spring?Boot項(xiàng)目抵御XSS攻擊實(shí)戰(zhàn)過(guò)程

    Spring?Boot項(xiàng)目抵御XSS攻擊實(shí)戰(zhàn)過(guò)程

    XSS攻擊又稱(chēng)跨站腳本攻擊,通常指利用網(wǎng)頁(yè)開(kāi)發(fā)時(shí)留下的漏洞,通過(guò)巧妙的方法注入惡意指令代碼到網(wǎng)頁(yè),使用戶(hù)加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁(yè)程序,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot項(xiàng)目抵御XSS攻擊的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • java使用RSA加密方式實(shí)現(xiàn)數(shù)據(jù)加密解密的代碼

    java使用RSA加密方式實(shí)現(xiàn)數(shù)據(jù)加密解密的代碼

    這篇文章給大家分享java使用RSA加密方式實(shí)現(xiàn)數(shù)據(jù)加密解密,通過(guò)實(shí)例代碼文字相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下
    2019-11-11
  • java獲取http請(qǐng)求的Header和Body的簡(jiǎn)單方法

    java獲取http請(qǐng)求的Header和Body的簡(jiǎn)單方法

    下面小編就為大家?guī)?lái)一篇java獲取http請(qǐng)求的Header和Body的簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • Java Stream中的Spliterator類(lèi)概念及原理解析

    Java Stream中的Spliterator類(lèi)概念及原理解析

    Spliterator是Java 8引入的一個(gè)接口,位于java.util包中,它結(jié)合了迭代器(Iterator)的遍歷能力和分割器(Splitter)的分割能力,本文將詳細(xì)介紹Spliterator的概念、原理、作用、類(lèi)中定義的關(guān)鍵方法,以及它在Stream API中的實(shí)際應(yīng)用,感興趣的朋友一起看看吧
    2024-08-08
  • Java 實(shí)現(xiàn)多線程的幾種方式匯總

    Java 實(shí)現(xiàn)多線程的幾種方式匯總

    JAVA多線程實(shí)現(xiàn)方式主要有三種:繼承Thread類(lèi)、實(shí)現(xiàn)Runnable接口、使用ExecutorService、Callable、Future實(shí)現(xiàn)有返回結(jié)果的多線程。其中前兩種方式線程執(zhí)行完后都沒(méi)有返回值,只有最后一種是帶返回值的。
    2016-03-03
  • Gateway如何實(shí)現(xiàn)全局跨域

    Gateway如何實(shí)現(xiàn)全局跨域

    這篇文章主要介紹了Gateway如何實(shí)現(xiàn)全局跨域問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java獲取Process子進(jìn)程進(jìn)程ID方法詳解

    Java獲取Process子進(jìn)程進(jìn)程ID方法詳解

    這篇文章主要介紹了Java獲取Process子進(jìn)程進(jìn)程ID方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-12-12
  • SpringBoot整合Mybatis的知識(shí)點(diǎn)匯總

    SpringBoot整合Mybatis的知識(shí)點(diǎn)匯總

    在本篇文章里小編給各位整理的是關(guān)于SpringBoot整合Mybatis的知識(shí)點(diǎn)匯總,有興趣學(xué)習(xí)的參考下。
    2020-02-02
  • Java IO流對(duì)文件File操作

    Java IO流對(duì)文件File操作

    這篇文章主要介紹了Java IO流對(duì)文件File操作,java封裝的一個(gè)操作文件及文件夾(目錄)的對(duì)象??梢圆僮鞔疟P(pán)上的任何一個(gè)文件和文件夾
    2022-12-12
  • Spring中的接口重試機(jī)制解析

    Spring中的接口重試機(jī)制解析

    這篇文章主要介紹了Spring中的接口重試機(jī)制解析,大家在做項(xiàng)目的時(shí)候,往往會(huì)遇到一些接口由于網(wǎng)絡(luò)抖動(dòng)等問(wèn)題導(dǎo)致接口響應(yīng)超時(shí)等,這時(shí)候我們會(huì)希望能夠按照一定的規(guī)則進(jìn)行接口請(qǐng)求重試,需要的朋友可以參考下
    2024-01-01

最新評(píng)論