# 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)
```
- Kotlin语言基础
- Kotlin的简介
- Kotlin的变量和常见数据类型
- Kotlin的区间
- Kotlin的位运算
- Kotlin的容器
- Kotlin类型检查
- Kotlin的空值处理
- Kotlin的函数
- Kotlin的类
- Kotlin的委托
- Kotlin的延迟加载
- Kotlin的异常
- Kotlin的Lambda表达式
- Kotlin的高阶函数
- Kotlin的标准库中的高阶函数
- Kotlin的泛型
- Kotlin的表达式
- Kotlin的解构
- Kotlin的运算符重载
- Kotlin语言中级
- Kotlin的扩展函数
- Kotlin的扩展属性
- Kotlin的infix关键字
- Kotlin的DSL
- Kotlin的一些注解(和Java互调用)
- Kotlin的lateinit和by lazy
- Kotlin的反射
- Kotlin的匿名接口
- 安卓中的Kotlin
- 数据库操作Room