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
- Excepcions: Errors o situacions inesperades que poden ocórrer durant l'execució d'un programa.
- Excepcions Personalitzades: Excepcions definides per l'usuari per representar errors específics de l'aplicació.
- 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
- Definir una nova classe que estengui
Exception
o una de les seves subclasses. - Proporcionar constructors per a la nova classe d'excepció.
- 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
-
Definició de la Classe
InvalidAgeException
:- La classe
InvalidAgeException
estènException
. - Té dos constructors: un per defecte i un que accepta un missatge personalitzat.
- La classe
-
Utilització de l'Excepció Personalitzada:
- La classe
Person
té un mètodesetAge
que llançaInvalidAgeException
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.
- La classe
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
- Introducció a Java
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Operadors
Mòdul 2: Flux de Control
Mòdul 3: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Mètodes
- Constructors
- Herència
- Polimorfisme
- Encapsulació
- Abstracció
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
- Lectura de Fitxers
- Escriptura de Fitxers
- Fluxos de Fitxers
- BufferedReader i BufferedWriter
- Serialització
Mòdul 8: Multithreading i Concurrència
- Introducció al Multithreading
- Creació de Fils
- Cicle de Vida dels Fils
- Sincronització
- Utilitats de Concurrència
Mòdul 9: Xarxes
- Introducció a les Xarxes
- Sockets
- ServerSocket
- DatagramSocket i DatagramPacket
- URL i HttpURLConnection