Bloque de prueba anidado de Kotlin y bloque de captura múltiple

Bloque de prueba anidado –

En este artículo, vamos a aprender el bloque try-catch anidado y el bloque catch múltiple. El bloque de prueba anidado es un bloque en el que podemos implementar un bloque de captura de prueba en otro bloque de captura de prueba.

El requisito de un bloque try-catch anidado surge cuando se produce una excepción en el bloque try-catch interno que no es manejado por los bloques catch internos, entonces los bloques try-catch externos se verifican en busca de esa excepción.

Sintaxis del bloque de prueba anidado –

// 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
}    

Programa Kotlin de bloque de prueba anidado –

Kotlin

fun main(args: Array<String>) {
    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)
    }
}

Producción:

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

Nota: Esta salida se genera para algún número aleatorio. Si obtendrá una salida diferente, no se preocupe porque su salida estará de acuerdo con el número aleatorio generado en ese instante de tiempo.

Bloque de captura múltiple –

Un bloque try puede tener más de un bloque catch. Cuando no estamos seguros de qué tipo de excepción puede ocurrir dentro del bloque de prueba, podemos colocar varios bloques de captura para las posibles excepciones y en el último bloque de captura podemos colocar la clase de excepción principal para manejar todas las excepciones restantes que no están especificadas por capturar bloques en el programa.

Sintaxis para múltiples capturas –

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
}

Programa Kotlin de múltiples bloques catch –

Kotlin

import java.util.Scanner
  
object Test {
    @JvmStatic
    fun main(args: Array<String>) {
        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)
        }
    }
}

Entrada 1:

GeeksforGeeks

Salida 1:

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

Entrada 2:

0

Salida 2:

java.lang.ArithmeticException: / by zero

En el programa anterior para la entrada 1, usamos una string pero requerimos un valor entero para obtener los factores de los números. Entonces, lanza la NumberFormatException.
Para la entrada 2, ingresamos cero pero no podemos dividir un número entero por cero. Entonces, lanza ArithmeticException.

Uso de when en el bloque catch –

En Kotlin, podemos usar la expresión when para reemplazar múltiples bloques catch. A continuación, mostraremos cómo usar la expresión when.

Kotlin

import java.lang.NumberFormatException
import java.util.Scanner
  
object Test {
    @JvmStatic
    fun main(args: Array<String>) {
        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 ") }
          }
        }
    }
}

Entrada 1:

GeeksforGeeks

Salida 1:

Number Format Exception 

Entrada 2:

0

Salida 2:

Arithmetic Exception: Divide by zero

Publicación traducida automáticamente

Artículo escrito por Praveenruhil y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *