In a perfect world, and in a nutshell...
Errors represent problems that aren't typically handled by a program. They represent severely bad situations that should not occur, and that a programmer should not try to recover from.
Sometimes errors occur because of (external) conditions that cannot be controlled or effected by the running Java program.
Exceptions come in too basic forms: Runtime Exceptions (aka Unchecked Exceptions) and Checked Exceptions.
Runtime Exceptions typically are not meant to be handled by a program. They often represent programmer errors, that should reveal themselves at run time and that should be fixed by the programmer correcting the code problem.
Checked Exceptions typically represent problem conditions outside of a program's control, but should be recovered from by the program.
For more information, a good place to learn lots of different and good ideas on exceptions in Java is at
http://c2.com/cgi/wiki?JavaExceptionHandling Does that help?