异常
异常类
所有的异常类都是 Exception
的子类。每个异常都有一个消息,栈踪迹和可选的原因。
使用 throw 表达式,抛出异常
throw MyException("Hi There!")
使用 try 捕获异常
try {
// some code
}
catch (e: SomeException) {
// handler
}
finally {
// optional finally block
}
有可能有不止一个的 catch 块。finally 块可以省略。
try 是一个表达式
try 可以有返回值:
val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }
try 返回值要么是 try 块的最后一个表达式,要么是 catch 块的最后一个表达式。finally 块的内容不会对表达式有任何影响。
检查异常
Kotlin 中没有异常检查。这是由多种原因造成的,我们这里举个简单的例子
下面是 JDK StringBuilder
类实现的一个接口
Appendable append(CharSequence csq) throws IOException;
这个签名说了什么? 它说每次我把 string 添加到什么东西(StringBuilder 或者 log console 等等) 上时都会捕获 IOExceptions
为什么呢?因为可能涉及到 IO 操作(Writer 也实现了 Appendable)... 所以导致所有实现 Appendable 的接口都得捕获异常
try {
log.append(message)
}
catch (IOException e) {
// Must be safe
}
这样是不利的,参看 Effective java
Bruce Eckel 在 java 需要异常检查吗? 说到:
Examination of small programs leads to the conclusion that requiring exception specifications could both enhance developer productivity and enhance code quality, but experience with large software projects suggests a different result – decreased productivity and little or no increase in code quality.
java 互动
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论