📅  最后修改于: 2021-01-05 07:31:29             🧑  作者: Mango
Kotlin try-catch块用于代码中的异常处理。 try块封装了可能引发异常的代码,并且catch块用于处理异常。此块必须写在方法中。必须在Kotlin try块之后紧接catch块或finally块,或同时执行两者。
try{
//code that may throw exception
}catch(e: SomeException){
//code that handles exception
}
try{
//code that may throw exception
}finally{
// code finally block
}
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块之后,将执行异常下面的其余代码。
我们可以使用try块作为返回值的表达式。 try表达式返回的值是try块的最后一个表达式或catch的最后一个表达式。 finally块的内容不影响表达式的结果。
让我们看一下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