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

Sir*_*raj 2 scala exception

我是Scala中异常处理的新手。Java声明这Exception是所有异常的超类。同样Throwable,Scala中所有异常的超类也是如此。但是最近我也遇到了在许多Scala代码中使用的“ Exception”类。您能告诉我Scala中Throwable班级与Exception班级之间的区别吗?

Krz*_*sik 6

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

         Throwable
            |
    ------------------
    |                |
  Error          Exception
    |                |
  errors             |
             -------------------
             |                 |
     runtime exceptions   checked exceptions
Run Code Online (Sandbox Code Playgroud)

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

错误错误的超类,这些错误无法恢复,例如VirtualMachineErrorThreadDeath。可以使用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)

  • 错误也可以被捕获,只是您不想这样做。Scala 也有 https://www.scala-lang.org/api/2.13.0/scala/util/control/NonFatal$.html 来区分自己的错误/异常版本。 (2认同)