L'immagine seguente mostra che le eccezioni "Controllato" e "Non selezionato" sono sottoclassi di Exception
. Trovo confuso il fatto che è necessario prendere uno Exception
ma non è necessario prendere uno RuntimeException
, che eredita direttamente da Exception
. C'è una ragione per cui gli sviluppatori non ci hanno permesso di lanciare Eccezioni senza aver bisogno di catturarle?Perché è necessario rilevare "Eccezione" ma non la Sottoclasse "RuntimeException"?
In particolare: perché si può ignorare solo RuntimeExceptions
ed è bambini? Perché non c'era una classe introdotta chiamata CheckedException extends Exception
e devi solo prenderla e sono i bambini?
La parte confusa è che è possibile lanciare tutto sotto lo RuntimeException
senza problemi, ma quando ci si sposta fino a Exception
nella gerarchia, è necessario catturarlo a un certo punto. Ciò è fonte di confusione perché "l'astrazione" normalmente funziona diversamente. Più ti muovi, più semplice e più diventa tutto. Questo non è il caso qui. Più ti muovi, più devi fare (tipo mettere try/catch dopo aver raggiunto Exception
).
ho pensato che se si cattura 'Exception' che si prenderà tutte le eccezioni e le eventuali discendenti di tale eccezione classe pure? –
Per qualsiasi ragione i progettisti di Java pensavano che le eccezioni controllate fossero una buona idea, hanno anche deciso che tutti i 'Throwable's dovrebbero essere controllati di default, a meno che non siano specificatamente esclusi dalla sottoclasse' Error' o 'RuntimeException'. – shmosel