🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 1. 捕获异常 在`Kotlin`中异常的处理还是`try-catch-finally`,但是略微有所不同,比如下面的案例: ~~~ fun main() { try { var a = 3 / 0 } catch (e: Exception){ println(e.localizedMessage) } finally { } } ~~~ 结果: ``` / by zero ``` 上面的案例是相同的使用部分。对于`Kotlin`中对于异常的处理更加便捷,比如: ~~~ fun main() { var a = try { 3 / 0 } catch (e: Exception){ 0 } finally { Int.MAX_VALUE } println(a) } ~~~ 结果: ``` 0 ``` 从上面的代码中我们可以体会到在`Kotlin`中处理异常的便捷。同时,注意到在`finally`中的代码不会被`return`语句所影响。 # 2. 抛出异常 在`Java`中我们都知道需要在方法后面使用`throw`关键字进行异常抛出给调用者。在`Kotlin`中在方法后面不用声明,使用同`Java`中的写法,比如: ~~~ fun calc(a: Int, b: Int): Double{ if(b == 0) throw Exception("by Zero") return a * 1.0 / b } fun main() { var result = try { calc(3, 0) } catch (e: Exception){ println(e.localizedMessage) 0 } println(result) } ~~~ 结果: ``` by Zero 0 ``` # 3. 自定义异常 自定义的异常类必须继承自`Throwable`类或其子类,比如下面的案例: ~~~ class MyException(override val message: String?): Throwable() { } fun calc(a: Int, b: Int): Double{ if(b == 0) throw MyException("by Zero") return a * 1.0 / b } fun main() { calc(3, 0) } ~~~ 结果: ``` Exception in thread "main" com.kotlinLearn.MyException: by Zero at com.kotlinLearn.KotlinDemoKt.calc(KotlinDemo.kt:11) at com.kotlinLearn.KotlinDemoKt.main(KotlinDemo.kt:16) at com.kotlinLearn.KotlinDemoKt.main(KotlinDemo.kt) ```