En aquest tema, aprendrem com crear les nostres pròpies excepcions personalitzades en Java. Les excepcions personalitzades són útils quan volem representar errors específics de la nostra aplicació que no estan coberts per les excepcions predefinides de Java.

Conceptes Clau

  1. Excepcions: Errors o situacions inesperades que poden ocórrer durant l'execució d'un programa.
  2. Excepcions Personalitzades: Excepcions definides per l'usuari per representar errors específics de l'aplicació.
  3. Herència: Les excepcions personalitzades es creen estenent la classe Exception o una de les seves subclasses.

Creació d'Excepcions Personalitzades

Passos per Crear una Excepció Personalitzada

  1. Definir una nova classe que estengui Exception o una de les seves subclasses.
  2. Proporcionar constructors per a la nova classe d'excepció.
  3. Opcionalment, afegir mètodes o camps addicionals per proporcionar més informació sobre l'error.

Exemple Pràctic

A continuació, crearem una excepció personalitzada anomenada InvalidAgeException que es llançarà quan l'edat proporcionada sigui invàlida (per exemple, negativa).

// Definició de l'excepció personalitzada
public class InvalidAgeException extends Exception {
    // Constructor per defecte
    public InvalidAgeException() {
        super("Edat invàlida proporcionada");
    }

    // Constructor que accepta un missatge personalitzat
    public InvalidAgeException(String message) {
        super(message);
    }
}

// Classe que utilitza l'excepció personalitzada
public class Person {
    private int age;

    // Mètode per establir l'edat
    public void setAge(int age) throws InvalidAgeException {
        if (age < 0) {
            throw new InvalidAgeException("L'edat no pot ser negativa: " + age);
        }
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public static void main(String[] args) {
        Person person = new Person();
        try {
            person.setAge(-5);
        } catch (InvalidAgeException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Explicació del Codi

  1. Definició de la Classe InvalidAgeException:

    • La classe InvalidAgeException estèn Exception.
    • Té dos constructors: un per defecte i un que accepta un missatge personalitzat.
  2. Utilització de l'Excepció Personalitzada:

    • La classe Person té un mètode setAge que llança InvalidAgeException si l'edat és negativa.
    • En el mètode main, intentem establir una edat negativa i capturem l'excepció per mostrar un missatge d'error.

Exercicis Pràctics

Exercici 1: Creació d'una Excepció Personalitzada

Crea una excepció personalitzada anomenada InsufficientFundsException que es llançarà quan un compte bancari no tingui suficients fons per a una retirada.

Solució

// Definició de l'excepció personalitzada
public class InsufficientFundsException extends Exception {
    public InsufficientFundsException() {
        super("Fons insuficients");
    }

    public InsufficientFundsException(String message) {
        super(message);
    }
}

// Classe que utilitza l'excepció personalitzada
public class BankAccount {
    private double balance;

    public BankAccount(double balance) {
        this.balance = balance;
    }

    public void withdraw(double amount) throws InsufficientFundsException {
        if (amount > balance) {
            throw new InsufficientFundsException("Fons insuficients per retirar: " + amount);
        }
        balance -= amount;
    }

    public double getBalance() {
        return balance;
    }

    public static void main(String[] args) {
        BankAccount account = new BankAccount(100.0);
        try {
            account.withdraw(150.0);
        } catch (InsufficientFundsException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Exercici 2: Ampliació de l'Excepció Personalitzada

Modifica l'excepció InsufficientFundsException per incloure el saldo actual i l'import de la retirada en el missatge d'error.

Solució

// Definició de l'excepció personalitzada amb informació addicional
public class InsufficientFundsException extends Exception {
    private double balance;
    private double amount;

    public InsufficientFundsException(double balance, double amount) {
        super("Fons insuficients: saldo actual " + balance + ", intent de retirada " + amount);
        this.balance = balance;
        this.amount = amount;
    }

    public double getBalance() {
        return balance;
    }

    public double getAmount() {
        return amount;
    }
}

// Classe que utilitza l'excepció personalitzada
public class BankAccount {
    private double balance;

    public BankAccount(double balance) {
        this.balance = balance;
    }

    public void withdraw(double amount) throws InsufficientFundsException {
        if (amount > balance) {
            throw new InsufficientFundsException(balance, amount);
        }
        balance -= amount;
    }

    public double getBalance() {
        return balance;
    }

    public static void main(String[] args) {
        BankAccount account = new BankAccount(100.0);
        try {
            account.withdraw(150.0);
        } catch (InsufficientFundsException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Resum

En aquesta secció, hem après a crear i utilitzar excepcions personalitzades en Java. Les excepcions personalitzades ens permeten representar errors específics de la nostra aplicació i proporcionar missatges d'error més significatius. Hem vist com definir una classe d'excepció personalitzada, com llançar-la i com capturar-la. També hem practicat amb exercicis per reforçar els conceptes apresos.

En el següent tema, explorarem el bloc finally i com utilitzar-lo per assegurar-nos que certs blocs de codi s'executin sempre, independentment de si es produeix una excepció o no.

Curs de Programació en Java

Mòdul 1: Introducció a Java

Mòdul 2: Flux de Control

Mòdul 3: Programació Orientada a Objectes

Mòdul 4: Programació Orientada a Objectes Avançada

Mòdul 5: Estructures de Dades i Col·leccions

Mòdul 6: Gestió d'Excepcions

Mòdul 7: Entrada/Sortida de Fitxers

Mòdul 8: Multithreading i Concurrència

Mòdul 9: Xarxes

Mòdul 10: Temes Avançats

Mòdul 11: Frameworks i Llibreries de Java

Mòdul 12: Construcció d'Aplicacions del Món Real

© Copyright 2024. Tots els drets reservats