📜  Kotlin尝试捕获

📅  最后修改于: 2021-01-05 07:31:29             🧑  作者: Mango

科特林尝试赶上

Kotlin try-catch块用于代码中的异常处理。 try块封装了可能引发异常的代码,并且catch块用于处理异常。此块必须写在方法中。必须在Kotlin try块之后紧接catch块或finally块,或同时执行两者。

try with catch块的语法

try{  
//code that may throw exception  
}catch(e: SomeException){
//code that handles exception
}  
try{  
//code that may throw exception  
}finally{
// code finally block
}  

try catch和finally块的语法

try {
    // some code
}
catch (e: SomeException) {
    // handler
}
finally {
    // optional finally block
}

没有异常处理的问题

让我们看一个导致未处理异常的示例。

fun main(args: Array){
    val data = 20 / 0   //may throw exception
    println("code below exception ...")
}

上面的程序生成一个异常,该异常导致低于该异常的其余代码不可执行。

输出:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at ExceptionHandlingKt.main(ExceptionHandling.kt:2)

通过异常处理解决

让我们通过使用try-catch块来查看上述问题的解决方案。

fun main(args: Array){
    try {
        val data = 20 / 0  //may throw exception
    } catch (e: ArithmeticException) {
        println(e)
    }
    println("code below exception...")
}

输出:

java.lang.ArithmeticException: / by zero
code below exception...

在上面的程序中,在执行try-catch块之后,将执行异常下面的其余代码。

Kotlin尝试将块作为表达式

我们可以使用try块作为返回值的表达式。 try表达式返回的值是try块的最后一个表达式或catch的最后一个表达式。 finally块的内容不影响表达式的结果。

Kotlin尝试作为表达示例

让我们看一下try-catch块作为返回值的表达式的示例。在此示例中,Int的字符串值不生成任何异常,并返回try块的最后一条语句。

fun main(args: Array){
val str = getNumber("10")
    println(str)
}
fun getNumber(str: String): Int{
    return try {
        Integer.parseInt(str)
    } catch (e: ArithmeticException) {
        0
    }
}

输出:

10

让我们修改上面的代码,生成一个异常并返回catch块的最后一条语句。

fun main(args: Array){
val str = getNumber("10.5")
    println(str)
}
fun getNumber(str: String): Int{
    return try {
        Integer.parseInt(str)
    } catch (e: NumberFormatException) {
        0
    }
}

输出:

0