Differenza tra eccezione non verificata o eccezione di runtime

Questa è stata una domanda di intervista. Qual è la principale differenza tra eccezione non controllata ed errore in quanto entrambi non vengono catturati? Faranno terminare il programma.

Come indicato dal loro nome, le eccezioni non controllate non vengono controllate in fase di compilazione, il che significa che il compilatore non richiede metodi per catturare o specificare (con un throws ). Le classi appartenenti a questa categoria sono dettagliate nella sezione 11.2 Controllo della compilazione delle eccezioni di JLS:

Le classi di eccezioni non controllate sono la class RuntimeException e le sue sottoclassi e la class Error e le sue sottoclassi . Tutte le altre classi di eccezioni sono classi di eccezioni controllate . L’API Java definisce un numero di classi di eccezioni, sia selezionate che deselezionate. Altre classi di eccezioni, sia selezionate che deselezionate, possono essere dichiarate dai programmatori. Vedere §11.5 per una descrizione della gerarchia delle classi di eccezioni e alcune delle classi di eccezioni definite dall’API Java e dalla virtual machine Java.

L’immagine seguente illustra la gerarchia delle eccezioni:

alt text

L’ Error class e le sue sottoclassi sono eccezioni dalle quali ordinariamente non ci si aspetta che i normali programmi recuperino e, come spiegato in 11.5 La gerarchia delle eccezioni :

L’ Error class è una sottoclass separata di Throwable , distinta da Exception nella gerarchia di classi, per consentire ai programmi di utilizzare l’idioma:

 } catch (Exception e) { 

raccogliere tutte le eccezioni dalle quali il recupero può essere ansible senza incappare in errori dai quali tipicamente il recupero non è ansible.

Riepilogando, RuntimeException è un sottoinsieme di eccezioni non controllate per le eccezioni da cui è ansible il recupero (ma l’eccezione non controllata non è un sinonimo di RuntimeException dato che molti stanno rispondendo qui).

I JavaDocs li sumno abbastanza bene.

java.lang.RuntimeException :

RuntimeException è la superclass di quelle eccezioni che possono essere generate durante il normale funzionamento della Java Virtual Machine.

Non è richiesto un metodo per dichiarare nella sua clausola di derivazione qualsiasi sottoclass di RuntimeException che potrebbe essere lanciata durante l’esecuzione del metodo ma non catturata.

java.lang.Error :

Un errore è una sottoclass di Throwable che indica i problemi seri che un’applicazione ragionevole non dovrebbe provare a catturare. La maggior parte di tali errori sono condizioni anormali. L’errore ThreadDeath, sebbene sia una condizione “normale”, è anche una sottoclass di Errore perché la maggior parte delle applicazioni non dovrebbe tentare di catturarla.

Non è richiesto un metodo per dichiarare nella sua clausola di derivazione alcuna sottoclass di Errore che potrebbe essere generata durante l’esecuzione del metodo ma non rilevata, poiché questi errori sono condizioni anomale che non dovrebbero mai verificarsi.

Notare che “eccezione non controllata” è semplicemente un sinonimo di RuntimeException .

Nota: una RuntimeException È un’eccezione non controllata

Un’eccezione non controllata potrebbe essere quella che è nota per essere ansible in un punto dell’esecuzione ma che non viene rilevata, ad esempio una NullPointerException è sempre una possibilità se non viene controllata e il programma verrà chiuso. È ansible verificarlo inserendo il codice in try-catch, ma questo non viene applicato (diversamente da un’eccezione verificata che imporrà che l’eccezione venga gestita in qualche modo).

Un errore è qualcosa che può verificarsi in qualsiasi momento durante l’esecuzione e non può essere catturato realmente perché non è causato in modo implicito da una particolare chiamata di metodo, ecc. Ad esempio un OutOfMemoryError o un StackOverflowError. Entrambe queste potrebbero verificarsi in qualsiasi momento e causeranno la chiusura dell’applicazione. Catturare questi errori non ha senso in quanto indicano che è successo qualcosa da cui non sarai in grado di recuperare.

Gli errori indicano problemi fondamentali che non dovrebbero mai verificarsi. Se incontri un errore s.th. davvero brutto successo.
Le eccezioni Unchecked ( eccezioni di runtime) invece vengono utilizzate ogni volta che ci si può aspettare un’eccezione, ma non c’è un modo ragionevole per gestirle e quindi una dichiarazione try catch sarebbe solo fastidiosa e uno spreco di spazio.

Eccezione controllata:

  • Le classi che estendono la class Throwable eccetto RuntimeException ed Error sono conosciute come eccezioni controllate.
  • Conosciuto anche come eccezione del tempo di compilazione perché questo tipo di eccezioni viene controllato in fase di compilazione. Ciò significa che se ignoriamo questa eccezione (non gestita con try/catch o throw l’eccezione), si è verificato un errore di compilazione.
  • Sono problemi risolvibili a livello di codice che sono causati da condizioni impreviste al di fuori del controllo del codice (ad esempio database inattivo, errore I / O file, input errato, ecc.)
  • Possiamo evitarli usando try/catch blocco try/catch .
  • Esempio: IOException , SQLException ecc

Eccezione non selezionata:

  • Le classi che estendono RuntimeException sono note come eccezioni non controllate
  • Le eccezioni non controllate non vengono controllate in fase di compilazione, ma vengono controllate in fase di esecuzione. Ed ecco perché vengono anche chiamate “Eccezione di runtime”
  • Sono anche problemi risolvibili a livello di codice, ma a differenza dell’eccezione verificata sono causati da errori nel stream di codice o nella configurazione.
  • Esempio: ArithmeticException , NullPointerException , ArrayIndexOutOfBoundsException ecc
  • Poiché si tratta di un errore di programmazione, possono essere evitati con una codifica piacevolmente / saggia. Ad esempio “dividendo per zero” si verifica ArithmeticEceeption . Possiamo evitarli con una semplice condizione if(divisor!=0)if(divisor!=0) . Allo stesso modo possiamo evitare NullPointerException semplicemente controllando i riferimenti – if(object!=null) o usando tecniche ancora migliori

Errore:

  • Error riferisce a situazioni irrecuperabili che non vengono gestite da try / catch
  • Esempio: OutOfMemoryError , VirtualMachineError , AssertionError ecc.

Errore : si tratta di condizioni eccezionali esterne all’applicazione e che l’applicazione solitamente non è in grado di anticipare o ripristinare.

Eccezione di runtime : si tratta di condizioni eccezionali interne all’applicazione e che l’applicazione solitamente non è in grado di anticipare o ripristinare.

Puoi leggere questo :

RuntimeExceptions ed errori come OutOfMemoryError non devono essere catturati e possono essere lanciati fino a che non raggiungono main () che terminerà l’applicazione.

Altre eccezioni causano un errore di compilazione se non vengono catturati o inclusi nell’elenco dei tiri.

Gli errori e le eccezioni di runtime sono noti collettivamente come eccezioni non controllate.

le eccezioni di runtime sono condizioni eccezionali interne all’applicazione e che l’applicazione solitamente non è in grado di anticipare o ripristinare. Questi di solito indicano bug di programmazione, come errori logici o uso improprio di un’API

Si consiglia di dare un’occhiata a questo link che spiega i tre tipi di eccezioni.

http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html

Spero che aiuti.