Perché ha senso avere eccezioni runtime UnChecked (al contrario di se fossero Controllato)?Perché le eccezioni del runtime sono "deselezionate" in Java?
risposta
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.
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.
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.
+1 per questo descrizione accurata. – Reuben
- 1. Perché le eccezioni nominate sono selezionate e deselezionate?
- 2. Avvolgere le eccezioni con le eccezioni del runtime con un'annotazione
- 3. Vim: le variabili non definite sono deselezionate
- 4. Perché WPF inceppare le eccezioni del databinding?
- 5. Quali sono le eccezioni controllate in Java/C#?
- 6. Java: Perché le classi PrintWriter o PrintStream non generano eccezioni?
- 7. avvisa l'utente se tutte le caselle di controllo sono deselezionate
- 8. Perché le eccezioni sono dannose per le prestazioni?
- 9. È possibile rilevare tutte le eccezioni tranne le eccezioni di runtime?
- 10. perché le costanti java sono dichiarate statiche?
- 11. modo migliore per gestire le eccezioni Java in ServletContextListener
- 12. Come posso rilevare le eccezioni del thread AWT in Java?
- 13. Caricamento del codice byte Java in Runtime
- 14. Eccezioni Java Eccezioni C++
- 15. Perché i blocchi sono serializzabili in java?
- 16. Perché MethodInfo.Invoke racchiude le eccezioni in TargetInvocationException?
- 17. Ci sono molte eccezioni in Bad design in Java?
- 18. Perché le guide richiedono JavaScript Runtime?
- 19. Perché NumberFormatException è di runtime?
- 20. Perché Grails elimina le mie eccezioni?
- 21. Quali sono le eccezioni standard di Scala?
- 22. Java: risoluzione del metodo di runtime
- 23. Java, eccezioni specifiche della classe rispetto alle eccezioni standard
- 24. Le eccezioni del runtime vengono rilevate con ACRA e non vengono visualizzate su Logcat
- 25. Perché le eccezioni AppDomain terminano invariabilmente l'applicazione?
- 26. Perché Akka Streams ingoia le mie eccezioni?
- 27. Perché le eccezioni in C++ non vengono controllate dal compilatore?
- 28. Tutte le eccezioni non rilevate sono fatali in PHP?
- 29. Come leggere le eccezioni del clojure in REPL?
- 30. Do Java Le discussioni hanno bisogno di una pulizia in caso di eccezioni si sono verificate
"Nessuno sta discutendo eccezioni incontrollate sono cattive comunque" - saresti sorpreso :-) Un grande +1 su tutto il resto, però. – ChssPly76
grazie @cletus. – Moeb
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 ... –