Take a look at the javadoc for these exceptions. You'll see that the ones that cause compiler errors extend Exception, whereas the ones that are OK extend RuntimeException.
Java has two types of Exception (and one type of Error), checked exceptions and runtime exceptions. Checked exceptions extend Exception, and must either be thrown explicitly by a method or handled within it using a try...catch block. The example code on lines 3,4 and 6 does neither and so the compiler generates an error. Runtime exceptions extend RuntimeException, and do not need to be handled explicitly.
A good way to think of it is that runtime exceptions come from bugs in the code (IndexOutOfBounds, for example) while checked exceptions can happen within bug-free code (maybe a network resource is unavailable). The compiler makes sure that your code copes with the latter case by making your method either catch the exception internally or explicitly throw it to the calling method.
HTH
(edit: wow, two other people replied while I was typing

)
Ben.
[ December 19, 2002: Message edited by: Ben Ritchie ]