Salve.
Credevo mi fosse chiaro che Exception ed Error sono le due sottoclassi di Throwable, e invece a quanto pare c'è qualcosa che non mi quadra immediatamente.

Javac mi compila questo codice...
codice:
public class Pag423 {
	public static void methodX() throws Exception {
		throw new AssertionError();
	}
	public static void main(String[] args) {
		try{
			methodX();
		}
		catch(Exception e) {
			System.out.println("EXCEPTION");
		}
	}
}
secondo cui methodX() è abilitato a generare una Exception... Poi però, invocato nel try, genera tranquillamente un Error semplicemente perché quello ci trova scritto!
Mi aspettavo un errore di compilazione, non la corretta esecuzione del methodX() invocato nel try{}...

La console riporta questo strano messaggio...
Exception in thread "main" java.lang.AssertionError
at Pag423.methodX(Pag423.java:3)
at Pag423.main(Pag423.java:7)
Con che logica Java risale da Exception a Throwable e poi scende in Error a prendere quell'errore?