A Giava, eccezione è un evento che si verifica durante l'esecuzione di un programma e interrompe il normale flusso delle istruzioni del programma. Vengono definiti bug o errori che non vogliamo e che limitano la normale esecuzione del codice del nostro programma eccezioni . In questa sezione ci concentreremo su tipi di eccezioni in Java e le differenze tra i due.
Le eccezioni possono essere classificate in due modi:
- Eccezioni integrate
- Eccezione controllata
- Eccezione non controllata
- Eccezioni definite dall'utente
Eccezione incorporata
Eccezioni che sono già disponibili in Librerie Java sono indicati come eccezione incorporata . Queste eccezioni sono in grado di definire la situazione di errore in modo da poter comprendere il motivo della comparsa di questo errore. Può essere classificato in due grandi categorie, vale a dire controllato le eccezioni E eccezione non controllata .
Eccezione controllata
Controllato vengono chiamate eccezioni fase di compilazione eccezioni perché queste eccezioni vengono controllate in fase di compilazione dal compilatore. Il compilatore garantisce se il programmatore gestisce l'eccezione o meno. Il programmatore dovrebbe gestire l'eccezione; in caso contrario il sistema ha segnalato un errore di compilazione.
CheckedExceptionExample.java
import java.io.*; class CheckedExceptionExample { public static void main(String args[]) { FileInputStream file_data = null; file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/Hello.txt'); int m; while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); } }
Nel codice sopra, stiamo cercando di leggere il file Ciao.txt file e visualizzarne i dati o il contenuto sullo schermo. Il programma genera le seguenti eccezioni:
- IL FileInputStream(nome file file) il costruttore lancia il file FileNotFoundException questa è un'eccezione controllata.
- IL Leggere() metodo del FileInputStream la classe lancia il IOException .
- IL vicino() Il metodo lancia anche l'IOException.
Produzione:
Come risolvere l'errore?
Esistono fondamentalmente due modi attraverso i quali possiamo risolvere questi errori.
1) Le eccezioni si verificano nel metodo principale. Possiamo eliminare questi errori di compilazione dichiarando l'eccezione nel metodo principale utilizzando i lanci Dichiariamo solo IOException, non FileNotFoundException, a causa della relazione figlio-genitore. La classe IOException è la classe genitore di FileNotFoundException, quindi questa eccezione verrà coperta automaticamente da IOException. Dichiareremo l'eccezione nel modo seguente:
class Exception{ public static void main(String args[]) throws IOException { ... ... }
Se compiliamo ed eseguiamo il codice, gli errori scompariranno e vedremo i dati del file.
2) Possiamo anche gestire queste eccezioni utilizzando prova a prendere Tuttavia, il modo che abbiamo utilizzato sopra non è corretto. Dobbiamo fornire un messaggio significativo per ciascun tipo di eccezione. Così facendo sarebbe facile capire l'errore. Utilizzeremo il blocco try-catch nel modo seguente:
Eccezione.java
import java.io.*; class Exception{ public static void main(String args[]) { FileInputStream file_data = null; try{ file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/programs/Hell.txt'); }catch(FileNotFoundException fnfe){ System.out.println('File Not Found!'); } int m; try{ while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); }catch(IOException ioe){ System.out.println('I/O error occurred: '+ioe); } } }
Vedremo un messaggio di errore corretto 'File non trovato!' sulla console perché non esiste un file di questo tipo in quella posizione.
Eccezioni non controllate
IL non controllato le eccezioni sono proprio opposte a controllato eccezioni. Il compilatore non controllerà queste eccezioni in fase di compilazione. In parole semplici, se un programma lancia un'eccezione non controllata, e anche se non la gestiamo o la dichiariamo, il programma non darebbe un errore di compilazione. Di solito si verifica quando l'utente fornisce dati errati durante l'interazione con il programma.
Nota: la classe RuntimeException è in grado di risolvere tutte le eccezioni non controllate a causa della relazione figlio-genitore.
UncheckedExceptionExample1.java
class UncheckedExceptionExample1 { public static void main(String args[]) { int postive = 35; int zero = 0; int result = positive/zero; //Give Unchecked Exception here. System.out.println(result); } }
Nel programma precedente, abbiamo diviso 35 per 0. Il codice verrebbe compilato correttamente, ma genererà un errore ArithmeticException in fase di runtime. Dividendo un numero per 0 viene generata l'eccezione di divisione per zero che è un'eccezione deselezionata.
Produzione:
casuale nessun generatore in Java
UncheckedException1.java
class UncheckedException1 { public static void main(String args[]) { int num[] ={10,20,30,40,50,60}; System.out.println(num[7]); } }
Produzione:
Nel codice precedente, stiamo cercando di ottenere l'elemento situato nella posizione 7, ma la lunghezza dell'array è 6. Il codice viene compilato correttamente, ma lancia l'ArrayIndexOutOfBoundsException in fase di runtime.
Eccezione definita dall'utente
In Giava , abbiamo già alcune classi di eccezioni integrate come ArrayIndexOutOfBoundsException , NullPointerException , E ArithmeticException . Queste eccezioni possono essere attivate solo in base ad alcune condizioni predefinite. In Java, possiamo scrivere la nostra classe di eccezioni estendendo la classe Exception. Possiamo lanciare la nostra eccezione su una condizione particolare usando la parola chiave launch. Per creare un'eccezione definita dall'utente, dovremmo avere una conoscenza di base di IL prova a prendere bloccare e gettare parola chiave .
Scriviamo a Programma Java e creare un'eccezione definita dall'utente.
UserDefinedException.java
import java.util.*; class UserDefinedException{ public static void main(String args[]){ try{ throw new NewException(5); } catch(NewException ex){ System.out.println(ex) ; } } } class NewException extends Exception{ int x; NewException(int y) { x=y; } public String toString(){ return ('Exception value = '+x) ; } }
Produzione:
Descrizione:
Nel codice precedente, abbiamo creato due classi, ovvero UserDefinedException E Nuovaeccezione . IL UserDefinedException ha il nostro metodo principale e il Nuovaeccezione class è la nostra classe di eccezione definita dall'utente, che si estende eccezione . Nel Nuovaeccezione class, creiamo una variabile X di tipo intero e assegnargli un valore nel costruttore. Dopo aver assegnato un valore a quella variabile, restituiamo il messaggio di eccezione.
Nel UserDefinedException classe, abbiamo aggiunto a prova a prendere bloccare. Nella sezione try, lanciamo l'eccezione, ovvero Nuovaeccezione e passargli un numero intero. Il valore verrà passato alla classe NewException e restituirà un messaggio. Catturiamo quel messaggio nel blocco catch e lo mostriamo sullo schermo.
Differenza tra eccezione controllata e non controllata
Si No | Eccezione controllata | Eccezione non controllata |
---|---|---|
1. | Queste eccezioni vengono controllate in fase di compilazione. Queste eccezioni vengono gestite anche in fase di compilazione. | Queste eccezioni sono esattamente opposte alle eccezioni controllate. Queste eccezioni non vengono controllate e gestite in fase di compilazione. |
2. | Queste eccezioni sono sottoclassi dirette di eccezioni ma non estese dalla classe RuntimeException. | Sono le sottoclassi dirette della classe RuntimeException. |
3. | Il codice restituisce un errore di compilazione nel caso in cui un metodo lancia un'eccezione verificata. Il compilatore non è in grado di gestire l'eccezione da solo. | Il codice viene compilato senza errori perché le eccezioni sfuggono all'attenzione del compilatore. Queste eccezioni sono il risultato di errori creati dall'utente nella logica di programmazione. |
4. | Queste eccezioni si verificano principalmente quando la probabilità di fallimento è troppo alta. | Queste eccezioni si verificano principalmente a causa di errori di programmazione. |
5. | Le eccezioni verificate comuni includono IOException, DataAccessException, InterruptedException, ecc. | Le eccezioni comuni non controllate includono ArithmeticException, InvalidClassException, NullPointerException, ecc. |
6. | Queste eccezioni vengono propagate utilizzando la parola chiave Throws. | Questi vengono propagati automaticamente. |
7. | È necessario fornire il blocco try-catch e try-finally per gestire l'eccezione verificata. | In caso di eccezione non controllata non è obbligatorio. |
Bug o errori che non vogliamo e che limitano la normale esecuzione dei programmi vengono definiti come eccezioni .
ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions ecc. rientrano nella categoria di Eccezione incorporata . A volte le eccezioni integrate non sono sufficienti per spiegare o descrivere determinate situazioni. Per descrivere queste situazioni, dobbiamo creare le nostre eccezioni creando una classe di eccezioni come sottoclasse di Eccezione classe. Questi tipi di eccezioni rientrano nella categoria di Eccezione definita dall'utente .