我是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/