Eccezioni selezionate e non selezionate in Java

1. Panoramica

Le eccezioni Java rientrano in due categorie principali: eccezioni verificate ed eccezioni non verificate . In questo articolo, forniremo alcuni esempi di codice su come usarli.

2. Eccezioni selezionate

In generale, le eccezioni controllate rappresentano errori al di fuori del controllo del programma. Ad esempio, il costruttore di FileInputStream genera FileNotFoundException se il file di input non esiste.

Java verifica le eccezioni controllate in fase di compilazione.

Pertanto, dovremmo usare la parola chiave throws per dichiarare un'eccezione controllata:

private static void checkedExceptionWithThrows() throws FileNotFoundException { File file = new File("not_existing_file.txt"); FileInputStream stream = new FileInputStream(file); }

Possiamo anche usare un blocco try-catch per gestire un'eccezione controllata:

private static void checkedExceptionWithTryCatch() { File file = new File("not_existing_file.txt"); try { FileInputStream stream = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } }

Alcuni comuni eccezioni controllate in Java sono IOException , SQLException e ParseException .

La classe Exception è la superclasse delle eccezioni verificate. Pertanto, possiamo creare un'eccezione selezionata personalizzata estendendo l' eccezione :

public class IncorrectFileNameException extends Exception { public IncorrectFileNameException(String errorMessage) { super(errorMessage); } } 

3. Eccezioni deselezionate

Se un programma genera un'eccezione non controllata, riflette un errore all'interno della logica del programma. Ad esempio, se dividiamo un numero per 0, Java lancerà ArithmeticException :

private static void divideByZero() { int numerator = 1; int denominator = 0; int result = numerator / denominator; } 

Java non verifica le eccezioni non controllate in fase di compilazione. Inoltre, non dobbiamo dichiarare eccezioni non controllate in un metodo con la parola chiave throws . E sebbene il codice sopra non presenti errori durante la compilazione, genererà ArithmeticException in fase di esecuzione.

Alcune eccezioni comuni non verificate in Java sono NullPointerException , ArrayIndexOutOfBoundsException e IllegalArgumentException .

La classe RuntimeException è la superclasse di tutte le eccezioni non controllate. Pertanto, possiamo creare un'eccezione non selezionata personalizzata estendendo RuntimeException :

public class NullOrEmptyException extends RuntimeException { public NullOrEmptyException(String errorMessage) { super(errorMessage); } }

4. Quando utilizzare le eccezioni selezionate e le eccezioni non selezionate

È una buona pratica utilizzare le eccezioni in Java in modo da poter separare il codice di gestione degli errori dal codice normale. Tuttavia, dobbiamo decidere quale tipo di eccezione generare. La documentazione Oracle Java fornisce indicazioni su quando utilizzare le eccezioni controllate e le eccezioni non selezionate:

“Se ci si può ragionevolmente aspettare che un cliente si riprenda da un'eccezione, rendila un'eccezione controllata. Se un client non può fare nulla per recuperare dall'eccezione, rendila un'eccezione non selezionata. "

Ad esempio, prima di aprire un file, possiamo prima convalidare il nome del file di input. Se il nome del file di input dell'utente non è valido, possiamo lanciare un'eccezione controllata personalizzata:

if (!isCorrectFileName(fileName)) { throw new IncorrectFileNameException("Incorrect filename : " + fileName ); } 

In questo modo, possiamo ripristinare il sistema accettando un altro nome di file di input dell'utente. Tuttavia, se il nome del file di input è un puntatore nullo o è una stringa vuota, significa che abbiamo degli errori nel codice. In questo caso, dovremmo lanciare un'eccezione non controllata:

if (fileName == null || fileName.isEmpty()) { throw new NullOrEmptyException("The filename is null or empty."); } 

5. conclusione

In questo articolo, abbiamo discusso la differenza tra eccezioni selezionate e non selezionate. Abbiamo anche fornito alcuni esempi di codice per mostrare quando utilizzare le eccezioni selezionate o deselezionate.

Come sempre, tutto il codice trovato in questo articolo può essere trovato su GitHub.