What is the difference between an IOException class that extends the Exception class and RuntimeException class that also extends Exception class?
Consider this code:
public class IOExceptionvsRuntime {
    public static void main(String[] args) {
        try {
            throw new IOException();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        throw new RuntimeException();
    }
}
Although both these classes extend the Exception class and yet the IOException has to be handled whereas compiler does not enforce handling of RuntimeException. I know the conceptual difference between the two that RuntimeException is an unchecked exception whereas IOException is a checked one.
It seems like there is some compiler-level handling, and I was interested in knowing more about how the compiler handles these.
 
    