I am new to the exception handling in Scala. Java states that Exception
is the superclass of all exceptions. Similarly Throwable
is the superclass of all exceptions in Scala. But recently I have come across "Exception" class being used in a lot of Scala codes too.
Can you please tell me the difference between Throwable
class and Exception
class in Scala.
Actually, Scala reuses exception structure from Java (so Throwable comes from Java). The class hierarchy looks like this:
Throwable
|
------------------
| |
Error Exception
| |
errors |
-------------------
| |
runtime exceptions checked exceptions
Throwable is the superclass of all errors in Java.
Error is the superclass for errors, that are not recoverable like VirtualMachineError or ThreadDeath. Errors can be intercepted using try-catch, but usually, it's not a good practice.
Child classes of Exception are exceptions, that are intended to handled programmatically by intercepting them using try-catch.
Java also makes the difference between runtime and checked exceptions, that checked exception need to be mandatorily handled by try-catch.
Scala though handles all exceptions as runtime, so intercepting them is voluntary.
Scala has also extractor named NonFatal, which can be used to pattern match non-fatal Throwables. For example:
try {
// dangerous stuff
} catch {
//will NOT match fatal errors like VirtualMachineError, ThreadDeath, LinkageError etc.
case NonFatal(e) => log.error(e, "Something not that bad.")
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With