The first one catches all subclasses of Throwable (this includes Exception and Error), the second one catches all subclasses of Exception Class.
Error is programatically unrecoverable in any way and should be avoided as far as catching is concerned, except for logging purposes, which in turn should throw it again. Error should not be caught, except if you are trying for something kinda "catch all" level of a thread.
Exception is programmatically recoverable. Its subclass RuntimeException indicates a programming error and is usually not to be catched as well.