2009-02-09 16 views

risposta

16

Perché si tratta di un'eccezione "runtime".

RuntimeExceptions sono utilizzati per identificare i problemi di programmazione (che un buon programmatore potrebbe evitare) mentre

Eccezioni controllate sono per identificare i problemi ambientali (che non poteva essere evitato non importa quanto bene si programma, un server è giù per esempio)

si potrebbe leggere di più su them here

in realtà ci sono three kinds of exceptions, solo uno di loro dovrebbe essere h andled (il più delle volte)

+0

Questa è una brutta descrizione della differenza tra le eccezioni di runtime/controllate. Questo è ** per nulla ** la differenza tra loro. Ci sono 'RuntimeException's che * si * devono intercettare e ci sono eccezioni controllate che è possibile evitare eseguendo controlli extra prima di chiamare il metodo. – Aaron

+0

Ex1: 'NumberFormatException' è uno che di solito dovresti prendere. Catching 'NumberFormatException' è meglio che provare a controllare il formato di un' String' da solo prima di convertirlo in un numero, in quanto si potrebbe * ancora * finire con un 'NumberFormatException' che ora non stai catturando. – Aaron

+0

Ex2: 'IOException' è uno che viene gettato ovunque da molte API. Questa è probabilmente l'eccezione più catturata per me e l'eccezione più catturata che vedo anche nel codice degli altri. Ci sono molti luoghi in cui sei costretto a catturare 'IOException' o le sue sottoclassi in cui non verrà mai lanciato in alcuni contesti di utilizzo dell'API che lo lancia. – Aaron

6

NumberFormatException estende RuntimeException, non è necessario gestire esplicitamente tutto ciò che eredita da RuntimeException.

Altre eccezioni di runtime sono cose come NullPointerException e IndexOutOfBoundsException. Queste sono cose che il programmatore può evitare e dover provare/catturare questi tipi di eccezioni creerebbe un codice piuttosto ingombrante.

7
  Throwable 
     / \ 
     Error Exception 
       / \ 
      *checked* RuntimeException 
          \ 
         *unchecked* 

Vedi Thinking in Java per una buona spiegazione di Controllato contro eccezioni incontrollato.

Alcuni considerano l'idea di eccezioni controllate un esperimento fallito. Ad esempio, sia Spring che Hibernate usano eccezioni non controllate e spesso avvolgono le eccezioni controllate in versioni non controllate.

2

Solo un lungo commento sulla risposta del toolkit.

La ragione Eccezioni controllate sono un problema è che alla fine portano a codice come questo:

try { 
    Something that throws an exception 
} catch (Exception e) {} 

Si tratta di caso peggiore. Prima di tutto, non stanno registrando che stanno prendendo l'eccezione. Questo accade molto, ed è quasi FORZATO da eccezioni molto stupide controllate come quella su Thread.sleep(), genera InterruptedException che DEVE essere catturato, ma il 99% delle volte non ti può importare di meno se ne hai uno o meno .

Nel caso precedente, è aggravato dal fatto che le persone tendono a catturare "Eccezione" solo se ce ne sono più di una generata. Ciò significa che anche se viene lanciata un'eccezione critica incontrollata, verrà catturata e ignorata rendendo praticamente impossibile trovare il problema.

Più di una volta sono stato in team che dovevano trascorrere circa un mese uomo cercando di rintracciare bug nascosti in questo modo.

È un buon concetto che diventa orribile quando si aggiunge il fatto che gli umani sono quelli che devono attuarlo responsabilmente.

Problemi correlati