Perché i due tipi di eccezione in Java sono denominati "checked" e "unchecked"? Qual è la ragione dietro a questi nomi?Perché le eccezioni nominate sono selezionate e deselezionate?
risposta
Se si chiama un metodo che è dichiarato di gettare un verificata eccezione (come ad esempio IOException
), il compilatore controllo che si sta sia la cattura o dichiarando che si rigenerare esso. Allo stesso modo, al fine di lanciare una tale eccezione controllata in primo luogo, il compilatore controlla che l'hai dichiarato come parte della firma del metodo.
Fondamentalmente, è un po 'come il controllo del tipo, tranne in termini di quali eccezioni possono essere lanciate da un metodo.
Il compilatore non esegue alcun controllo per le eccezioni non controllate, in modo che possano essere generate da qualsiasi metodo, senza il metodo che le dichiara.
Le eccezioni controllate vengono verificate dal compilatore Java: controlla che vengano catturate o dichiarate nella firma del metodo.
"Controllato" significa che devi prenderlo o dichiarare che il tuo metodo lo getta nella firma. Gli utenti del tuo metodo devono intercettare le eccezioni controllate. In caso contrario, si verificherà un errore del compilatore.
"Deselezionato" significa che né l'utente né gli utenti del metodo sono tenuti a rilevare l'eccezione. Non sei tenuto a dichiararlo in una clausola di tiri nella tua firma del metodo.
Nella sua prima incarnazione, Java ha scelto il primo il più delle volte.
C# rende le eccezioni non selezionate di default. Anche gli sviluppatori Java hanno accettato questa convenzione.
controllato eccezioni - queste eccezioni sono creati dagli utenti o qualcosa che può essere specificato come IOException. Qui sono incluse le eccezioni di business logic. Tutti questi devono essere dichiarati come "getta xxxException" o circondati da try-catch. Quindi il nome - DEVI controllarlo esplicitamente.
incontrollati eccezioni - qui ci sono eccezioni che sono principalmente interno per Java Virtual Machine come RuntimeException, StackOverflowException ed errori. Questi non devono essere elaborati dall'applicazione e potrebbero non essere pertinenti per la logica di business dell'applicazione. Essi non sono tenuti ad essere dichiarato con 'getta' o circondato da try-catch
Questo non è corretto. Gli utenti possono creare eccezioni non controllate estendendo RuntimeException. IllegalArgumentException * è * un'eccezione non controllata; SQLException è un'eccezione controllata. Per favore correggi questo. – duffymo
Hai ragione, il mio esempio era sbagliato, ma l'idea che sto spiegando è diversa. Informazioni sulle eccezioni di business logic che possono essere qualsiasi cosa come PaymentException, TranscationFailedException, ecc. - apportando un significato all'applicazione aziendale ... Uno sviluppatore può estendere RuntimeException, ma ciò non significa che dovresti farlo. Personalmente penso che ciò dovrebbe accadere raramente e lo considero un anti-modello. Dovresti essere in grado di coprire tutti i casi di eccezione con chiarezza di facile comprensione e un piccolo numero di eccezioni e non nasconderne alcune ad un utente della tua classe. –
Non pensi che dovrebbero farlo? Qual è la tua risposta al fatto che C# rende le eccezioni non controllate l'idioma predefinito e prevalente? E che Java sta seguendo l'esempio in questi giorni? Stai dicendo che Anders Hejlsberg è un povero designer di lingue? – duffymo
In Java si può buttare qualsiasi Throwable
. Throwable ha due sottoclassi: Error
e Exception
. Quando viene emesso un errore Error
, si è verificato un problema grave che spesso ha poco a che fare con il codice. Tali eccezioni non vengono verificate dal compilatore ed è un esempio di un'eccezione non controllata .
L'eccezione ha una sottoclasse denominata RuntimeException
, quelle sono spesso eccezioni che indicano errori nel codice e possono spesso verificarsi in molti punti nella maggior parte del codice. Esempi sono NullPointerException
, ArrayIndexOutOfBoundsException
, ecc. Questi sono anche deselezionati poiché si sporcherebbe il codice con catture di questi.
Tutte le altre eccezioni sono verificate dal dal compilatore e devi prenderle o lanciarle.
- 1. Perché le eccezioni del runtime sono "deselezionate" in Java?
- 2. Vim: le variabili non definite sono deselezionate
- 3. avvisa l'utente se tutte le caselle di controllo sono deselezionate
- 4. Perché le eccezioni sono dannose per le prestazioni?
- 5. Problema con sottoclasse e superclasse con le stesse proprietà nominate
- 6. Quali sono le eccezioni standard di Scala?
- 7. Perché WPF inceppare le eccezioni del databinding?
- 8. Perché Grails elimina le mie eccezioni?
- 9. Perché le eccezioni AppDomain terminano invariabilmente l'applicazione?
- 10. Restituisce colonne selezionate selezionate
- 11. In che modo le tuple nominate sono implementate internamente in python?
- 12. memoria deallocazione e le eccezioni
- 13. Perché Akka Streams ingoia le mie eccezioni?
- 14. Perché MethodInfo.Invoke racchiude le eccezioni in TargetInvocationException?
- 15. Quali sono le eccezioni controllate in Java/C#?
- 16. come ottengo tutte le variabili della casella di controllo anche se non sono state selezionate da HTML a PHP?
- 17. Naming: Perché le costanti nominate dovrebbero essere tutte maiuscole in C++/Java?
- 18. Dev le eccezioni sono mostrate nell'ambiente di produzione
- 19. iPhone Le celle UITableView rimangono selezionate
- 20. PowerShell 2.0 e come gestire le eccezioni?
- 21. Come denominate e organizzate le vostre eccezioni?
- 22. Tutte le eccezioni non rilevate sono fatali in PHP?
- 23. Anonimo vs classi interne nominate? - migliori pratiche?
- 24. Dove e come gestire le eccezioni Stripe?
- 25. std :: :: unique_ptr azzerati e le eccezioni costruttore
- 26. Perché dovrei sempre rendere le mie eccezioni [serializzabili]? (NET)
- 27. Java: Perché le classi PrintWriter o PrintStream non generano eccezioni?
- 28. Perché l'ordine è importante quando si rilevano le eccezioni?
- 29. git flow che rilascia le funzionalità selezionate
- 30. JTable: come ottenere le celle selezionate?
Cos'altro chiameresti? Qual è la domanda qui? Finché capisci cosa significa 'checked' significa che questa non è una vera domanda. – EJP