我是Scala中异常处理的新手。 Java指出Exception
是所有异常的超类。同样,Throwable
是Scala中所有异常的超类。但是最近我也遇到了在许多Scala代码中使用的“ Exception”类。
您能否告诉我Scala中的Throwable
类和Exception
类之间的区别。
答案 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.")
}