2009-11-01 10 views

risposta

17

Se non fosse necessario provare/rilevare blocchi ogni volta che si accede a un elemento di matrice, è stata eseguita un'operazione di divisione e molti altri scenari comuni.

Per dirla in altro modo, immaginare questo codice:

Map map = ... 
int i = ... 
(int[])map.get("foo")[3] = 2334/i; 

avrebbe dovuto verificare la presenza di ClassCastException, ArrayIndexOutofBoundsException, ArithmeticException, UnsupportedOperationException e NullPointerException appena fuori dalla parte superiore della mia testa.

Con Java il problema non è eccezioni unchecked. Le eccezioni controllate sono un argomento molto controverso. Alcuni dicono che questo è stato in gran parte un esperimento con Java e in pratica non funzionano, ma troverete molte persone che sostengono che sono buone.

Nessuno sta discutendo eccezioni non controllate sono comunque cattive.

+0

"Nessuno sta discutendo eccezioni incontrollate sono cattive comunque" - saresti sorpreso :-) Un grande +1 su tutto il resto, però. – ChssPly76

+0

grazie @cletus. – Moeb

+6

Infatti, se l'eccezione di runtime fosse selezionata, sarebbe comunque difficile gestire le eccezioni, poiché quasi tutto ciò che si potrebbe fare nel blocco catch potrebbe causare nuove eccezioni di runtime che a loro volta dovrebbero essere gestite ... –

1

Ciò significa semplicemente che il compilatore non ti costringerà a cercare un'eccezione, ma puoi comunque lanciarlo in fase di runtime. Come un vantaggio, questo ti permette di lanciare nuove eccezioni dalle tue classi senza che tu debba modificare l'interfaccia, facendo sì che i chiamanti cambino il loro codice.

8

L'idea dei due tipi di eccezioni in Java (selezionata e deselezionata) è che le eccezioni controllate devono essere utilizzate per le condizioni di errore che possono essere ragionevolmente prevedibili e le eccezioni non controllate devono essere utilizzate per condizioni di errore impreviste.

Ad esempio, se non si trova un file, si ottiene FileNotFoundException ed è ragionevole aspettarsi che il programma sia in grado di gestire tale condizione. Le eccezioni non controllate dovrebbero essere utilizzate solo per problemi che non dovrebbero verificarsi, e ciò significa che c'è un bug nel programma se si verifica un problema simile. Ad esempio, un NullPointerException significa che il tuo programma sta tentando di dereferenziare una variabile che sia null e che molto probabilmente sia un bug.

Java compilatore costringe il programmatore per gestire le eccezioni controllate. Ciò rende il linguaggio di programmazione più sicuro, il che significa che il programmatore è costretto a riflettere sulle condizioni di errore, il che dovrebbe rendere il programma più solido.

Il compilatore non controlla le eccezioni non controllate, perché le eccezioni non controllate non dovrebbero accadere comunque e se lo fanno, non c'è nulla che il programma possa ragionevolmente fare in fase di runtime; il programmatore deve risolvere il bug.

Ci sono state alcune critiche a questa funzionalità in Java, alcune persone chiamano anche le eccezioni controllate a failed experiment e alcune persone propose to remove checked exceptions da Java.

+0

+1 per questo descrizione accurata. – Reuben

Problemi correlati