Quote Originariamente inviata da andbin Visualizza il messaggio
Gli Error sono tecnicamente "unchecked", quindi NON c'è alcun obbligo di dichiararli né di catturarli/gestirli. Gli Error comunque sono concettualmente un po' diversi dalle altre eccezioni, nel senso che rappresentano errori "gravi" a cui tipicamente e difficilmente si può porre rimedio.

Comunque AssertionError non ha nulla a che fare con Exception. AssertionError NON deriva da Exception .... deriva da Error che deriva da Throwable. Quindi NON è il tuo catch di Exception nel main che può catturare AssertionError.
Questo è quanto risulta anche a me, per questo mi sembra tutto assurdo nel leggere certi codici e come vengono eseguiti.
Non ho chiamato in ballo il catch perché lui si aspetta una Exception e non un Error, bensì l'esecuzione del blocco try che spassionatamente genera un errore che non è tra le sottoclassi di Exception.
Secondo me doveva starci
codice:
public static void methodX() throws Error
proprio perché se volessi prepararmi a lanciare un IOEXception, potrei scrivere
codice:
public static void methodX() throws Exception
non
codice:
public static void methodX() throws Error
Invoco cioè la classe precisa o una sua superclasse, non una superclasse "zia" di quella che poi vado a generare.

Insomma l'Error in questo caso si presenta senza invito (sennò il throws che viene specificato a fare...). Com'è possibile?