The choice for checked exceptions is usually: you just add it to throws , if you can't do anything about it, catch and convert it to a new exception with the original as a reason if you can't do anything useful about it, but can add information and catch and do something about it, if possible, and also in the right place in the code to do something.
Uncontrolled exceptions are a bit trickier. In an ideal world, they should point out programming / logic errors and be handled pretty much like a statement failure, not caught and especially not swallowed.
Some unchecked exception coming from the standard Java library or other libraries should, in my opinion, really be checked by exceptions, but this is not so. These are cases where the caller must recognize that such exceptions can go through them, even if they do not catch them. For unchecked exceptions that can also be checked by exceptions, basically the same rules: catch them if you want to do something with them, otherwise let them bubble. If you are creating a library (even if it is only internal to the application), and an unchecked exception is really something to catch later, then you might want to catch it and throw it into the checked exception in the library code.
In general, try to avoid removing excluded exceptions. Check the input, so you do not need to catch , and if the exception is still thrown, then this is an error and should be left unmapped. Only catch if this is the only or at least the best way.
To be fair for Java libraries, the language was developed in an era when the IDE did not immediately complain about the lack of offers about throws and offered to automatically fill them, so their uncontrolled can be justified, reducing the load on the developer. But with modern tools there really is no excuse.
And then, as mentioned in other answers, there are excluded exceptions that you should not catch.