If the exception descends from java.lang.RuntimeException (like NullPointerException), then it's unchecked and you don't have to catch it. In fact, most of the time you shouldn't catch these kinds because they indicate an error in your program that should be resolved (for instance, your program should check for null).
If the exception descends from java.lang.Exception, without having java.lang.RuntimeException in its hierarchy (like java.io.IOException), then it's checked and you have to catch it.
The last category is errors. These descend from java.lang.Error and indicate serious problems (like java.lang.OutOfMemoryError). These also do not have to be caught and generally shouldn't be.
So, to evaluate the exceptions that you listed in your post, simply look them up in the api and see which types they descend from.