scala - Exception和Throwable类之间有什么区别?

标签 scala exception

我是Scala中异常处理的新手。 Java声明Exception是所有异常的 super class 。同样,Throwable是Scala中所有异常的 super class 。但是最近我也遇到了很多Scala代码中都使用的“Exception”类。
您能告诉我Scala中Throwable类和Exception类之间的区别吗?

最佳答案

实际上,Scala重用了Java的异常结构(因此Throwable来自Java)。类层次结构如下所示:

         Throwable
            |
    ------------------
    |                |
  Error          Exception
    |                |
  errors             |
             -------------------
             |                 |
     runtime exceptions   checked exceptions

Throwable是Java中所有错误的 super class 。

错误是错误的 super class ,这些错误无法恢复,例如VirtualMachineError或ThreadDeath。可以使用try-catch拦截错误,但是通常这不是一个好习惯。

Exception的子类是异常,旨在通过使用try-catch对其进行拦截来以编程方式进行处理。

Java还使运行时异常和检查异常之间有所不同,该检查异常需要由try-catch强制处理。

尽管Scala将所有异常作为运行时进行处理,所以拦截它们是voluntary

Scala还具有名为NonFatal的提取器,可用于对非致命Throwables进行模式匹配。例如:
try {
  // dangerous stuff
} catch {
  //will NOT match fatal errors like VirtualMachineError, ThreadDeath, LinkageError etc.
  case NonFatal(e) => log.error(e, "Something not that bad.") 
}

关于scala - Exception和Throwable类之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57038111/

相关文章:

Scala:== 默认为等于吗?

java - 使用 scala 将 JavapairRDD 转换为数据帧

scala - intellij 上的 Gradle Scala 项目

Java 异常处理变量未初始化

c# - 多线程应用程序中的异常。

scala - F# 是否有相当于 Scala 的 Promise 的工具?

scala - 在 Scala 中,是否可以实例化泛型类型 T 的对象?

android - 无法启动 Activity 二进制 XML 文件错误膨胀类,在 Dex 路径列表中找不到类 - Android

exception - 在 Intellij 中运行 Kotlin REPL 时出现 Java.lang.ExceptionInInitializerError

java处理返回异常