Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Crea un metodo chiamato processNumber che accetta due argomenti:

  1. Una stringa (number) da convertire in intero
  2. Un booleano (shouldThrow) che determina se deve essere lanciata un'eccezione

Il metodo deve:

  1. Inizializzare una variabile risultato a 0
  2. Nel blocco try:
    • Se shouldThrow è true, dividere 10 per 0
    • Altrimenti, convertire la stringa number in intero e memorizzarla in result
  3. Nel blocco catch: impostare result a -1
  4. Nel blocco finally: aggiungere 100 a result
  5. 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));
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Java online