返回介绍

异常

发布于 2025-03-08 18:25:16 字数 2015 浏览 0 评论 0 收藏 0

异常类

所有的异常类都是 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 互动

参看 Java Interoperability section

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文