我是Scala中异常处理的新手。Java声明这Exception是所有异常的超类。同样Throwable,Scala中所有异常的超类也是如此。但是最近我也遇到了在许多Scala代码中使用的“ Exception”类。您能告诉我Scala中Throwable班级与Exception班级之间的区别吗?
实际上,Scala重用了Java的异常结构(因此Throwable来自Java)。类的层次结构如下所示:
Throwable
|
------------------
| |
Error Exception
| |
errors |
-------------------
| |
runtime exceptions checked exceptions
Run Code Online (Sandbox Code Playgroud)
Throwable是Java中所有错误的超类。
错误是错误的超类,这些错误无法恢复,例如VirtualMachineError或ThreadDeath。可以使用try-catch拦截错误,但是通常这不是一个好习惯。
Exception的子类是异常,旨在通过使用try-catch对其进行拦截来以编程方式进行处理。
Java还使运行时异常和检查异常之间有所不同,该检查异常需要由try-catch强制处理。
尽管Scala将所有异常作为运行时进行处理,所以拦截它们是自愿的。
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.")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |