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