1) Both of the pieces of code are OK. What do you mean with "it didn't work"? Did you get an error message? What was the error message?
2) It depends. For most applications, doesn't really make sense to catch an exception from which the program can't recover in a meaningful way. A NullPointerException usually an unexpected error that indicates that there is a serious problem, a bug, in the code. The program most likely can't do anything about it if a NullPointerException happens, so it is most likely not very useful to try and catch it. Catching and handling unchecked exceptions works in the same way as with checked exceptions.
3) Because statements must be inside methods. When would you expect that SOP statement to be executed if you write it like that?
4) Because you can synchronize on any Object, not just on a Thread object.
5) Only for checked exceptions it is mandatory to either catch the exception or declare it in a throws-clause, to indicate that your method lets the exception pass higher up the call stack. For unchecked exceptions this is not necessary. NumberFormatException is a subclass of RuntimeException, so it is an unchecked exception.