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

时间:2019-07-15 10:46:04

标签: scala exception

我是Scala中异常处理的新手。 Java指出Exception是所有异常的超类。同样,Throwable是Scala中所有异常的超类。但是最近我也遇到了在许多Scala代码中使用的“ Exception”类。 您能否告诉我Scala中的Throwable类和Exception类之间的区别。

1 个答案:

答案 0 :(得分:5)

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

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

Throwable 是Java中所有错误的超类。

错误是错误的超类,这些错误无法像 VirtualMachineError ThreadDeath 那样恢复。可以使用 try-catch 拦截错误,但是通常这不是一个好习惯。

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

Java还使 runtime checked 异常有所不同,必须通过 try-catch强制处理 checked 异常。

Scala虽然将所有异常作为 runtime 处理,所以拦截它们是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.") 
}