📜  Kotlin 嵌套 try 块和多个 catch 块

📅  最后修改于: 2022-05-13 01:54:33.361000             🧑  作者: Mango

Kotlin 嵌套 try 块和多个 catch 块

嵌套尝试块 -

在本文中,我们将学习嵌套的 try-catch 块和多个 catch 块。嵌套的 try 块是一个块,我们可以在其中将一个 try catch 块实现到另一个 try catch 块中。

当内部 try-catch 块中发生的异常未被内部 catch 块处理时,就会出现嵌套 try-catch 块的要求,然后检查外部 try-catch 块是否存在该异常。

嵌套 try 块的语法 -

// outer try block
try    
{    
    // inner try block   
    try    
    {    
        // code that can throw exception   
    }    
    catch(e: SomeException)    
    {    
     // catch the exception and handle it
    }    
}    
catch(e: SomeException)    
{    
// catch the exception and handle it
}    

嵌套 try 块的 Kotlin 程序 -

Kotlin
fun main(args: Array) {
    val numbers = arrayOf(1,2,3,4)
  
    try {
        for (i in numbers.indices) {
            try {
                var n = (0..4).random()
                println(numbers[i+1]/n)
  
            } catch (e: ArithmeticException) {
                println(e)
            }
        }
    } catch (e: ArrayIndexOutOfBoundsException) {
        println(e)
    }
}


Kotlin
import java.util.Scanner
  
object Test {
    @JvmStatic
    fun main(args: Array) {
        val sc = Scanner(System.`in`)
        try {
            val n = Integer.parseInt(sc.nextLine())
            if (512 % n == 0)
                println("$n is a factor of 512")
        } catch (e: ArithmeticException) {
            println(e)
        } catch (e: NumberFormatException) {
            println(e)
        }
    }
}


Kotlin
import java.lang.NumberFormatException
import java.util.Scanner
  
object Test {
    @JvmStatic
    fun main(args: Array) {
        val sc = Scanner(System.`in`)
        try {
            val n = Integer.parseInt(sc.nextLine())
            if (512 % n == 0)
                println("$n is a factor of 512")
        } catch (e: Exception ) {
          when(e){
              is ArithmeticException -> { println("Arithmetic Exception: Divide by zero") }
              is NumberFormatException -> { println("Number Format Exception ") }
          }
        }
    }
}


输出:

2
3
java.lang.ArithmeticException: / by zero
java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4

注意:此输出是针对某个随机数生成的。如果您会得到一些不同的输出,请不要担心,因为您的输出将根据该时刻生成的随机数。

多个 catch 块 -

一个 try 块可以有多个 catch 块。当我们不确定 try 块内会发生什么类型的异常时,我们可以为潜在的异常放置多个 catch 块,在最后一个 catch 块中,我们可以放置父异常类来处理未指定的所有剩余异常捕获程序中的块。

多重捕获的语法 -

try {
    // code may throw exception
} catch(e: ExceptionNameOne) {
    // catch the exception one and handle it
} catch(e: ExceptionNameTwo) {
    // catch the exception two and handle it
}

多个 catch 块的 Kotlin 程序 -

科特林

import java.util.Scanner
  
object Test {
    @JvmStatic
    fun main(args: Array) {
        val sc = Scanner(System.`in`)
        try {
            val n = Integer.parseInt(sc.nextLine())
            if (512 % n == 0)
                println("$n is a factor of 512")
        } catch (e: ArithmeticException) {
            println(e)
        } catch (e: NumberFormatException) {
            println(e)
        }
    }
}

输入 1:

GeeksforGeeks

输出 1:

java.lang.NumberFormatException: For input string: "GeeksforGeeks"

输入 2:

0

输出 2:

java.lang.ArithmeticException: / by zero

在上述输入 1 的程序中,我们使用一个字符串,但需要一个整数值来获取数字的因数。因此,它抛出 NumberFormatException。
对于输入 2,我们输入零,但我们不能将整数除以零。因此,它会抛出 ArithmeticException。

在 catch 块中使用 –

在 Kotlin 中,我们可以使用 when 表达式来替换多个 catch 块。在下面,我们将展示如何使用 when 表达式。

科特林

import java.lang.NumberFormatException
import java.util.Scanner
  
object Test {
    @JvmStatic
    fun main(args: Array) {
        val sc = Scanner(System.`in`)
        try {
            val n = Integer.parseInt(sc.nextLine())
            if (512 % n == 0)
                println("$n is a factor of 512")
        } catch (e: Exception ) {
          when(e){
              is ArithmeticException -> { println("Arithmetic Exception: Divide by zero") }
              is NumberFormatException -> { println("Number Format Exception ") }
          }
        }
    }
}

输入 1:

GeeksforGeeks

输出 1:

Number Format Exception 

输入 2:

0

输出 2:

Arithmetic Exception: Divide by zero