Defensive coding

Reality is that you have the Exceptions. No way around it. They are a fact of life. No way to avoid them. Might as well deal with them in the most efficient way.
No need to check for a null-value. Just let the code throw a NPE. Otherwise the next poor b*stard has to do the same.

Don't group Exceptions

There are many cases where a specific Exception does not need to be reported to the user.
Or the user may want different messages?
'Try to format the date as YYYY-MM-DD' vs. 'Not enough points'.
Or maybe an Exception can be handled by reconnecting?
All that is lost if Exceptions are grouped.

InterruptedException

A very notable one...
A lot of people find it annoying. If you want a Thread the pause for a bit, you have to deal with it.
This one is in fact not really thrown because of an exception or error. It is thrown because someone asked for it.
When you call interrupt on a Thread it does not stop immediately. It only stops when it reaches a point where the InterruptedException can be thrown. And then it is thrown immediately.

Console:

Starting thread... interrupted: false alive: true After interrupt interrupted: true alive: true java.lang.InterruptedException: sleep interrupted at java.base/java.lang.Thread.sleep0(Native Method) at java.base/java.lang.Thread.sleep(Thread.java:509) at com.bentzn.bytes.exceptions.Interrupted$1.run(Interrupted.java:22) After interrupt interrupted: false alive: true Thread finished After join interrupted: false alive: false