JavaRush /Java Blog /Random-IT /Le 10 domande principali sulle eccezioni in Java
raynn
Livello 31
Нижний Новгород

Le 10 domande principali sulle eccezioni in Java

Pubblicato nel gruppo Random-IT
L'articolo descrive le 10 domande più frequenti sulle eccezioni in Java. Le 10 domande principali sulle eccezioni in Java - 1

1. Verificabile e non verificabile

In breve, le eccezioni controllate devono essere catturate esplicitamente nel corpo del metodo o dichiarate nella sezione Throws del metodo. Le eccezioni non controllate sono causate da problemi che non possono essere risolti, come la divisione per 0, il puntatore nullo, ecc. Le eccezioni selezionate sono particolarmente importanti perché ti aspetti che altri sviluppatori che utilizzano la tua API sappiano come gestire le eccezioni. Ad esempio, IOException è un'eccezione controllata comunemente utilizzata, mentre RuntimeException è un'eccezione non controllata. Prima di leggere oltre, controlla il diagramma delle eccezioni gerarchiche in Java .

2. Il modo migliore per gestire le eccezioni

Se l'eccezione può essere gestita correttamente, deve essere catturata, altrimenti deve essere inoltrata.

3. Perché le variabili definite in try non possono essere utilizzate in catch o infine?

Nella seguente parte di codice, la riga dichiarata in un blocco try non può essere utilizzata in un blocco catch. Questo codice non verrà compilato.
try {
	File file = new File("path");
	FileInputStream fis = new FileInputStream(file);
	String s = "inside";
} catch (FileNotFoundException e) {
	e.printStackTrace();
	System.out.println(s);
}
Il motivo è che non è noto in quale punto del blocco try potrebbe essere stata lanciata l'eccezione. È possibile che l'eccezione sia stata lanciata prima che l'oggetto fosse dichiarato. E questo è vero per questo esempio.

4. Perché Double.parseDouble(null) e Integer.parseInt(null) lanciano eccezioni diverse?

Esatto, sollevano diverse eccezioni. Questo è un problema di JDK. Sono stati semplicemente progettati da persone diverse e non dovresti preoccuparti troppo di questo.
Integer.parseInt(null);
// вызывает java.lang.NumberFormatException: null

Double.parseDouble(null);
// вызывает java.lang.NullPointerException

5. Eccezioni di runtime di base in Java

Eccone alcuni:
IllegalArgumentException
ArrayIndexOutOfBoundsException
Possono essere utilizzati in un'istruzione if quando la condizione non è soddisfatta, come qui:
if (obj == null) {
   throw new IllegalArgumentException("obj не может быть равно null");

6. È possibile catturare più eccezioni in un unico blocco catch?

La risposta è si. Finché le classi di queste eccezioni possono essere ricondotte nella gerarchia di ereditarietà delle classi fino alla stessa superclasse, è possibile utilizzare solo quella superclasse.

7. Un costruttore può lanciare eccezioni?

La risposta è si. Un costruttore è solo un tipo speciale di metodo. Ecco un esempio di codice.

8. Lanciare eccezioni nel blocco finale

In linea di principio, puoi farlo legalmente:
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		try {
			FileInputStream fis = new FileInputStream(file2);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
Ma per mantenere la leggibilità del codice, è necessario dichiarare il blocco nidificato try-catchcome un nuovo metodo e inserire una chiamata a questo metodo nel blocco finally.
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		methodThrowException();
	}
}

9. È possibile utilizzare return in un blocco final?

Si, puoi.

10. Perché gli sviluppatori gestiscono le eccezioni in silenzio?

Ad esempio, tali pezzi di codice compaiono spesso. Se la corretta gestione delle eccezioni è così importante, perché gli sviluppatori continuano a scriverla in questo modo?
try {
     ...
} catch(Exception e) {
     e.printStackTrace();
}
È più facile da ignorare. Ma anche se questo viene fatto spesso, non significa che sia corretto. Collegamenti:
  1. Eccezioni non controllate in Java
  2. La radice di un albero gerarchico delle eccezioni in Java
  3. Domande sulle eccezioni su StackOverflow
Articolo originale
Cos'altro leggere:

Eccezioni in Java

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION