This week's book giveaway is in the OCAJP forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide 1Z0-808 and have Jeanne Boyarsky & Scott Selikoff on-line! See this thread for details.
There are a lot of differences, but something you can kind of rely on, is if the compiler can see the error without processing any code, like doing arithmetic, method calls, etc..., then it will be a compiler error. Example you try to use a local varible before you initialize it, you try to convert an int to a byte without a cast. If the compiler can't tell, but there is something that happens in your code that can cause an error, then it is a runtime error. For example, a file doesn't exist, or you try to divide an int by zero, or you perform a cast which turns out to be illegal. Bill