Kotlin基礎教程の異常

2805 ワード

Kotlin基礎教程の異常
概要
Kotlin-nullの処理でNPEというのは異常です。異常はプログラム運転中に発生したエラーです。Kotlinでは、すべての異常がThrowableに受け継がれています。各異常については、異常な情報だけでなく、異常な原因を選択的に含むことができ、その原因も異常な例である。
異常を投げる
throw表現を使って、異常を投げます。

throw MyException("Hi There!")
捕獲異常
関数の内部に異常が発生した場合(または関数内部で呼び出された他の関数に異常が発生した場合)は、この関数は例外を投げたところで終了します。関数の終了を望まない場合は、この投げられた異常を捕獲して処理しなければなりません。
Kotlinでは異常を捕捉するためにtry式を使うことができます。

try {
  //     
}
catch (e: SomeException) {
  //     
}
finally {
  //     finally    
}
  • try文ブロック:実行しようとするコードを表しています。try文ブロックのコードは異常に監視されています。コードが異常が発生した場合、異常なオブジェクトが投げられます。
  • catch文ブロック:tryコードブロックで発生した異常を捕獲し、そのコードブロックに異常処理を行い、catch文にはThrowableタイプのパラメータが付いていて、捕獲可能な異常タイプを表しています。tryに異常が発生した場合、catchは発生した異常を捕獲し、自分の異常タイプと整合すると、catchブロックのコードを実行し、catchブロックのパラメータを投げられた異常なオブジェクトに向ける。catch文は複数あってもいいです。複数の中の一つの異常にマッチします。一度嵌めたら、もう他のcatchブロックにマッチしないようにします。異常オブジェクトから異常発生時のJVMスタック情報、異常情報や異常発生の原因などを取得できます。
  • finally文ブロック:catch文の直後のステートメントブロックについては、このステートメントブロックは、try文ブロックが異常が発生しているかどうかにかかわらず、常に方法の戻り前に実行される。このステートメントブロックは、常に方法が戻る前に実行されます。目的はプログラムを補完する機会を与えることです。このようにしてJava言語のたくましさも表しています。
  • 注:
  • try、catch、finallyの3つの文のブロックは単独で使うことができなくて、3つはtry...catch...finally、try...catch、try...finallyの3つの構造を構成することができて、catch文は一つ以上あってもいいです。finally文は一番多いです。
  • try、catch、finallyの3つのコードブロックにおける変数の作用領域はコードブロック内部であり、それぞれ独立して相互にアクセスできない。3つのブロックにアクセスできる場合、これらのブロックの外側に変数を定義する必要があります。
  • 複数のcatchブロックの場合、一つの異常類別にマッチして、catchブロックコードを実行するだけで、他のcatchブロックを実行しなくて、マッチするcatch文の順番は上から下までです。
  • try式には0個以上のcatchコードセグメントがあります。finallyコードセグメントは省略できます。しかし、catchまたはfinallyコードセグメントは少なくともtryとペアで出現します。
  • カスタム異常
    Ktlin標準ライブラリに封入されている異常タイプは、すべての発生する可能性のある異常な状況を予見することができません。この時、自分で異常を定義して、プログラムに発生する可能性のある特定の問題を表します。
    異常をカスタマイズするには、既存の異常クラスを継承し、その異常状況が似ているクラスを継承し、異常タイプを作成する一番簡単な方法はエディタを使ってデフォルトの構造方法を作成することです。このように簡単で効果的です。
    
    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表現
    Kotlinではtryは表式であり、つまり戻り値があります。
    
    val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }
    try表式の戻り値は、tryコードセグメント内の最後の表式の値か、またはcatchコードセグメント内の最後の表式の値です。finallyコードセグメントの内容はtry式の結果に影響しません。
    読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。