Blocco finally
Fa parte della sezione Logica e flusso del percorso Java di Coddy. Lezione 41 di 59.
Il blocco finally contiene codice che verrà eseguito dopo i blocchi try-catch, indipendentemente dal fatto che si verifichi o meno un'eccezione. Viene comunemente usato per operazioni di pulizia, come la chiusura di file o connessioni al database.
Ecco la struttura di base di un blocco try-catch-finally:
try {
// Codice che potrebbe generare un'eccezione
} catch (ExceptionType e) {
// Codice per gestire l'eccezione
} finally {
// Codice che viene sempre eseguito
}Vediamo un esempio con un contatore:
int counter = 0;
try {
int result = 10 / 0;
// Questo genererà un'eccezione
counter = 1;
} catch (ArithmeticException e) {
counter = 2;
} finally {
counter = 3;
// Questo verrà sempre eseguito
}Dopo aver eseguito il codice precedente, counter contiene:
3
Il tipo tra le parentesi di catch determina quali errori gestisce quel blocco. Due tipi comuni sono ArithmeticException, generata da una divisione intera per zero, e NumberFormatException, generata da Integer.parseInt() quando il testo non è un numero. Un singolo catch può gestire più tipi contemporaneamente:
try {
int value = Integer.parseInt(text);
int result = 10 / value;
} catch (ArithmeticException | NumberFormatException e) {
// gestisce entrambe le eccezioni
} finally {
// viene sempre eseguito
}Catturare invece Exception è più ampio: gestisce entrambi e qualsiasi altra eccezione.
Sfida
FacileCrea un metodo chiamato processNumber che accetta due argomenti:
- Una stringa (
number) da convertire in intero - Un booleano (
shouldThrow) che determina se deve essere lanciata un'eccezione
Il metodo deve:
- Inizializzare una variabile risultato a 0
- Nel blocco try:
- Se shouldThrow è true, dividere 10 per 0
- Altrimenti, convertire la stringa number in intero e memorizzarla in result
- Nel blocco catch: impostare result a -1
- Nel blocco finally: aggiungere 100 a result
- Restituire result come stringa
Provalo tu
import java.util.Scanner;
public class Main {
public static String processNumber(String number, boolean shouldThrow) {
// Scrivi il tuo codice qui
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String number = scanner.nextLine();
boolean shouldThrow = Boolean.parseBoolean(scanner.nextLine());
System.out.println(processNumber(number, shouldThrow));
}
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Array multidimensionali
Concetti di base degli array 2DAccesso agli elementi degli array 2DCicli annidati con array 2DRiepilogo - Array 2DAddizione e sottrazione di matriciArray irregolariArray 3D e oltreSchemi comuni degli array 2DRiepilogo - Tutto sugli array4HashSet Parte 1
Che cos'è un HashSet?Aggiungere un elementoRimuovere un elementoVerificare se un elemento esisteVuoto e dimensioneSvuotare e clonareRipasso - HashSet7Gestione di base degli errori
Nozioni di base su try-catchBlocco finallyLancio di eccezioniEccezioni personalizzate2HashMap Parte 1
Che cos'è una HashMap?Dichiarare una HashMapAccedere ai valoriVerificare se una chiave esisteModificare i dizionariRiepilogo - HashMap3HashMap Parte 2
Metodi di HashMapIterare con keySet()Iterare con entrySet()HashMap annidateRiepilogo - Gestire il magazzinoRiepilogo - Operazioni con HashMap6Flusso di controllo avanzato
Istruzioni con etichettaEspressione switchCorrispondenza dei patternClausole guardiaRiepilogo - Flusso di controllo9Progetto - Contatore di parole uniche
Inserimento e memorizzazione del testoElaborazione delle paroleEsercitati da solo: Compilatore Java online