Generally, it is used to wrap lower level exceptions that usually, but not always, represent unrecoverable exceptional
situations. So, rather than public methods throwing many lower level exceptions in their APIs that would need to be caught,
those can now be handled with one catch statement.

If a lower level exception is being wrapped, you can access that exception using the getCause() method.