Quote Originariamente inviata da Gas75 Visualizza il messaggio
Lo so che gli Error sono unchecked, allora quel throws Exception serve solo a confondere!
Se quello è un "quiz" o qualcosa del genere .... allora sì certo, è fatto per confondere!

Quote Originariamente inviata da Gas75 Visualizza il messaggio
Togliendo throws Exception, noto che l'esecuzione è identica: Exception in thread "main" java.lang.AssertionError che sembra contraddittorio poiché AssertionError non appartiene alle Exception ma agli Error.
Non capisco perché dovrebbe essere contraddittorio. Una eccezione tecnicamente "unchecked" può essere lanciata in qualunque punto senza dover anticipare/dichiarare alcunché, indipendentemente dalle eccezioni "checked" eventualmente dichiarate con throws.

Quote Originariamente inviata da Gas75 Visualizza il messaggio
Cioè per Java il throw di un errore qualsiasi è sempre una Exception perché sto controllando io l'evento throw new AssertionError()?
throw lancia solo una eccezione. Può essere catturata già nel metodo (dove viene lanciata) oppure può uscire fuori dal metodo. Se è checked, per poter uscire fuori dal metodo DEVE essere dichiarata (esattamente quella eccezione oppure un supertipo).
Tutto qui.

Quote Originariamente inviata da Gas75 Visualizza il messaggio
Java cioè vede prima che il codice chiama qualcosa con un throw e per lui è una Exception, anche se dopo gli metto una classe creata da me che estende un qualunque Throwable?
Forse devi ancora chiarirti le idee ....

Quote Originariamente inviata da Gas75 Visualizza il messaggio
Per fare andare in porto l'esecuzione, devo scrivere:
[....]
Stavolta viene eseguito il catch perché ho da gestire l'errore che ho creato, sebbene la sua non gestione (quando il catch si aspetta una Exception) interrompe l'esecuzione avvisandomi in console di una Exception.
Qui ovviamente ok, viene lanciato un AssertionError e più a monte c'è un catch proprio di AssertionError. Quindi è effettivamente catturata.