Errors: When a dynamic linking failure or some other "hard" failure in the virtual machine happens, the virtual machine gives an Error. Typical Java programs could not find Errors. In addition, it's unlikely that typical Java programs can ever give Errors either.
Exceptions: Most programs give and catch objects that define from the Exception class. Exceptions indicate that a problem happened but that the problem is not a serious JVM problem. An Exception class has different subclasses. These descendants indicate several types of exceptions that can happen. One exception subclass has unique meaning in the Java language: RuntimeException. All the exceptions except RuntimeException are checked on compile time. If a method is capable of gaining a checked exception it has to be declared it in its method header or handle it in a try/catch block.
A RuntimeException:class presents exceptions that happen within the Java virtual machine. A type of a runtime exception is NullPointerException. The price of checking for the runtime exception usually outweighs the benefit of catching it. Trying to catch or specify all of them all the time could prepare your code unmaintainable and unreadable. The compiler gives runtime exceptions to go unspecified and uncaught.