2012-10-27 15 views

risposta

12

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.

+0

+1 rapido e preciso, come sempre. – dan

+0

Esattamente, grazie :) – LuckyLuke

3

Le eccezioni controllate vengono verificate dal compilatore Java: controlla che vengano catturate o dichiarate nella firma del metodo.

2

"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.

-1
  • 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

+0

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

+0

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. –

+0

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

1

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.

Problemi correlati