Domanda

Sto cercando di imparare di più su base Java e i diversi tipi di Throwables, qualcuno può farmi sapere le differenze tra le Eccezioni ed Errori?

È stato utile?

Soluzione

Errori non dovrebbe essere catturato o trattati (tranne in rari casi).Le eccezioni sono il pane e il burro di gestione delle eccezioni.Il Javadoc lo spiega bene:

Un Errore è una sottoclasse di Throwable che indica problemi gravi che un ragionevole applicazione non dovrebbe provare a prendere.La maggior parte di questi errori sono anormale condizioni.

Un'occhiata ad alcune delle sottoclassi di Error, prendendo alcuni dei loro commenti JavaDoc:

  • AnnotationFormatError - Generata quando l'annotazione parser tenta di leggere un'annotazione da un file di classe e determina che l'annotazione non è valido.
  • AssertionError - Gettato per indicare che un'asserzione non riuscita.
  • LinkageError - Sottoclassi di LinkageError indicare che una classe ha una certa dipendenza di un'altra classe;tuttavia, l'ultima della classe ha incompatibly cambiato dopo la compilazione della ex classe.
  • VirtualMachineError - Gettato per indicare che la Macchina Virtuale Java è rotto o ha esaurito le risorse necessarie per continuare ad operare.

Ci sono in realtà tre grandi sottocategorie di Throwable:

  • Error - Qualcosa di abbastanza grave è andato storto la maggior parte delle applicazioni in crash, piuttosto che cercare di gestire il problema,
  • Unchecked Exception (aka RuntimeException- Molto spesso un errore di programmazione come un NullPointerException o illegali argomento.Le applicazioni possono, a volte, di gestire o di recuperare questo Throwable categoria -- o almeno prendere al Thread run() metodo, il registro di denuncia, e continuare a correre.
  • Eccezione controllata (aka Tutto il resto) - le Applicazioni devono essere in grado di catturare e significativamente fare qualcosa con il resto, come FileNotFoundException e TimeoutException...

Altri suggerimenti

diapositiva che mostra di Java eccezione gerarchia da @ Georgios-gousios spiega sinteticamente le differenze tra errori ed eccezioni in Java.

 Java Eccezione Gerarchia

Gli errori tendono a segnalare la fine della vostra applicazione come lo conoscete. E 'in genere non può essere recuperato da e dovrebbe causare il VM per uscire. Afferrare loro non dovrebbe essere fatto salvo per il login o, eventualmente, di visualizzazione e di messaggio appropriato prima di uscire.

Esempio: OutOfMemoryError -. Non molto si può fare come il vostro programma non può più eseguire

Le eccezioni sono spesso recuperabili e anche quando non è, in genere significa solo un tentativo di operazione non è riuscita, ma il programma può ancora portare avanti.

Esempio: IllegalArgumentException -. Passato dati non validi a un metodo in modo che il metodo di chiamata non è riuscita, ma non influenza le operazioni future

Questi sono esempi semplicistici, e non v'è un altro grande quantità di informazioni sui soli pochi eccezioni.

lo mette meglio :

  

Un errore è una sottoclasse di Throwable   che indica gravi problemi che una   applicazione ragionevole non dovrebbe provare   per la cattura.

errori -

  1. Errors in java sono di tipo java.lang.Error.
  2. Tutti gli errori in Java sono di tipo incontrollato.
  3. Errors avvengono in fase di esecuzione. Essi non saranno resi noti al compilatore.
  4. E 'impossibile correggere gli errori.
  5. Errors sono per lo più causati da l'ambiente in cui applicazione è in esecuzione.
  6. Esempi: java.lang.StackOverflowError, java.lang.OutOfMemoryError

eccezioni -

  1. Exceptions in Java sono di tipo java.lang.Exception.
  2. Exceptions comprendono sia controllato così come il tipo incontrollato.
  3. Eccezioni controllate sono noti a compilatore dove come eccezioni unchecked non sono noti a compilatore perché si verificano in fase di esecuzione.
  4. È possibile recuperare da eccezioni da loro manipolazione attraverso i blocchi try-catch.
  5. Exceptions sono principalmente causato dalla applicazione stessa.
  6. Esempi: eccezioni controllate: SQLException, IOException
    Eccezioni unchecked: ArrayIndexOutOfBoundException, ClassCastException, NullPointerException

Per ulteriori approfondimenti: http://javaconceptoftheday.com/difference- tra-error-vs-eccezioni-in-java / http://javaconceptoftheday.com/wp-content/uploads/2015/04/ErrorVsException.png

La descrizione della classe Error è abbastanza chiaro:

  

Un Error è una sottoclasse di Throwable   che indica gravi problemi che una   applicazione ragionevole non dovrebbe provare   catturare. La maggior parte di tali errori sono   condizioni anomale. il ThreadDeath   errore, anche se una condizione "normale", è   anche una sottoclasse di Error perché la maggior parte   le applicazioni non dovrebbero cercare di catturare   esso.

     

Un metodo non è tenuto a dichiarare in   la sua clausola throws eventuali sottoclassi   Error che potrebbero essere gettato durante la   esecuzione del metodo, ma non   catturati, dal momento che questi errori sono   condizioni anomale che non dovrebbe mai   verificarsi.

del Error di classe .

In breve, non si dovrebbe prendere Errors, tranne avete una buona ragione per farlo. (Ad esempio per evitare che la realizzazione di web server in crash se un servlet esaurisce la memoria o qualcosa del genere).

Un Exception, d'altra parte, è solo un'eccezione normale come in qualsiasi altra lingua moderna. Troverete una descrizione dettagliata nella documentazione delle API Java o qualsiasi risorsa online o offline.

Ci sono diversi somiglianze e le differenze tra le classi java.lang.Exception e java.lang.Error.

Somiglianze:

  • In primo luogo - entrambe le classi si estende java.lang.Throwable e di conseguenza eredita molti dei metodi che sono comuni da utilizzare quando si tratta con errori come: getMessage, getStackTrace, printStackTrace e così via.

  • In secondo luogo, come sottoclassi di java.lang.Throwable entrambi ereditano le seguenti proprietà:

    • Throwable se stessa e alle sue sottoclassi (compresi java.lang.Error) può essere dichiarato in lista metodo eccezioni usando throws parola chiave. Tale dichiarazione richiesta solo per java.lang.Exception e sottoclassi, per java.lang.Throwable, java.lang.Error e java.lang.RuntimeException e le loro sottoclassi è facoltativo.

    • Solo java.lang.Throwable e sottoclassi permesso l'utilizzo nella clausola catch.

    • Solo java.lang.Throwable e sottoclassi possono essere utilizzati con parola chiave -. throw

La conclusione di questa struttura segue sia java.lang.Error e java.lang.Exception possono essere dichiarate nell'intestazione del metodo, può essere nella clausola catch, può essere utilizzato con throw parola.

Differenze:

  • In primo luogo - concettuale differenza: java.lang.Error progettato per essere gettato dalla JVM e indicare i gravi problemi e destinato a fermarsi esecuzione del programma invece di essere catturato (ma è possibile che per qualsiasi altro successore java.lang.Throwable).

    Un passaggio da javadoc Descrizione su java.lang.Error:

      

    ... indica gravi problemi che una richiesta ragionevole dovrebbe   Non cercare di catturare.

    In java.lang.Exception opposta progettato per rappresentare gli errori che previsto e può essere gestito da un programmatore senza terminazione l'esecuzione del programma.

    Un passaggio da javadoc Descrizione su java.lang.Exception:

      

    ... indica condizioni che un'applicazione ragionevole potrebbe voler   cattura.

  • La seconda differenza tra java.lang.Error e java.lang.Exception quella prima considerata un incontrollato eccezione per il controllo eccezione compilazione. Come il codice risultato gettando java.lang.Error o delle sue sottoclassi non richiedono di dichiarare questo errore nell'intestazione metodo. Mentre gettando java.lang.Exception dichiarazione richiesta nell'intestazione metodo.

diagramma Throwable e la classe successore (proprietà e metodi sono omessi). entrare descrizione dell'immagine qui

IMO un errore è qualcosa che può causare l'applicazione di fallire e non deve essere maneggiato. Un'eccezione è qualcosa che può causare risultati imprevedibili, ma può essere recuperato da.

Esempio:

Se un programma ha esaurito la memoria è un errore come l'applicazione non può continuare. Tuttavia, se un programma accetta un tipo di input non corretto è un'eccezione come il programma può gestire e reindirizzare a ricevere il tipo di ingresso corretto.

Ecco una buona sintesi di API Java quello che un errore e di eccezione rappresenta:

  

Un errore è una sottoclasse di Throwable che indica gravi problemi che un'applicazione ragionevole non dovrebbe cercare di catturare. La maggior parte di tali errori sono condizioni anomale. L'errore ThreadDeath, anche se una condizione "normale", è anche una sottoclasse di errore perché la maggior parte delle applicazioni non dovrebbero cercare di catturarlo.

     

Un metodo non è tenuto a dichiarare in   la sua clausola throws eventuali sottoclassi   Errore che potrebbe essere gettato durante la   esecuzione del metodo, ma non   catturati, dal momento che questi errori sono   condizioni anomale che non dovrebbe mai   verificarsi.

OTOH, per le eccezioni, Java API dice:

  

L'eccezione di classe e le sue sottoclassi sono una forma di Throwable che indica le condizioni in cui una domanda ragionevole potrebbe voler prendere.

Gli errori sono principalmente causati dall'ambiente in cui applicazione è in esecuzione. Ad esempio, si verifica quando OutOfMemoryError JVM esaurisce la memoria o StackOverflowError si verifica quando overflow dello stack.

Eccezioni sono principalmente causati dall'applicazione stessa. Ad esempio, NullPointerException si verifica quando un'applicazione tenta di accedere oggetto nullo o ClassCastException si verifica quando un'applicazione tenta di lanciare tipi di classe incompatibili.

Fonte: differenza tra errore Vs Eccezione In Java

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top