En aquest tema, explorarem els conceptes de throw
i throws
en Java, que són fonamentals per a la gestió d'excepcions. Aquests mecanismes permeten als desenvolupadors manejar errors de manera controlada i robusta.
Conceptes Clau
Throw
- La paraula clau
throw
s'utilitza per llançar una excepció explícitament des d'un bloc de codi. - Quan es llança una excepció amb
throw
, l'execució del programa es deté i es transfereix el control al bloccatch
corresponent, si n'hi ha.
Throws
- La paraula clau
throws
s'utilitza en la signatura d'un mètode per indicar que aquest mètode pot llançar una o més excepcions. - Això informa als usuaris del mètode que han de gestionar aquestes excepcions.
Sintaxi
Throw
Throws
Exemples Pràctics
Exemple de Throw
public class ThrowExample { public static void main(String[] args) { try { checkAge(15); } catch (Exception e) { System.out.println("Excepció capturada: " + e.getMessage()); } } public static void checkAge(int age) { if (age < 18) { throw new IllegalArgumentException("L'edat ha de ser 18 o superior."); } else { System.out.println("Edat vàlida."); } } }
Explicació:
- El mètode
checkAge
llança unaIllegalArgumentException
si l'edat és menor de 18. - El bloc
try-catch
en el mètodemain
captura aquesta excepció i imprimeix el missatge d'error.
Exemple de Throws
import java.io.IOException; public class ThrowsExample { public static void main(String[] args) { try { readFile("fitxer_inexistent.txt"); } catch (IOException e) { System.out.println("Excepció capturada: " + e.getMessage()); } } public static void readFile(String fileName) throws IOException { if (fileName.equals("fitxer_inexistent.txt")) { throw new IOException("El fitxer no existeix."); } else { System.out.println("Fitxer llegit correctament."); } } }
Explicació:
- El mètode
readFile
declara que pot llançar unaIOException
. - Si el nom del fitxer és "fitxer_inexistent.txt", es llança una
IOException
. - El bloc
try-catch
en el mètodemain
captura aquesta excepció i imprimeix el missatge d'error.
Exercicis Pràctics
Exercici 1: Llançar una Excepció Personalitzada
Descripció:
Crea una classe d'excepció personalitzada anomenada InvalidInputException
. Escriu un mètode que llança aquesta excepció si l'entrada és negativa.
Solució:
class InvalidInputException extends Exception { public InvalidInputException(String message) { super(message); } } public class CustomExceptionExample { public static void main(String[] args) { try { checkInput(-5); } catch (InvalidInputException e) { System.out.println("Excepció capturada: " + e.getMessage()); } } public static void checkInput(int input) throws InvalidInputException { if (input < 0) { throw new InvalidInputException("L'entrada no pot ser negativa."); } else { System.out.println("Entrada vàlida."); } } }
Exercici 2: Gestió de Múltiples Excepcions
Descripció:
Escriu un mètode que llegeixi un fitxer i converteixi el seu contingut a un nombre enter. El mètode ha de llançar IOException
si el fitxer no existeix i NumberFormatException
si el contingut no és un nombre vàlid.
Solució:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class MultipleExceptionsExample { public static void main(String[] args) { try { int number = readAndConvertFile("fitxer.txt"); System.out.println("El nombre és: " + number); } catch (IOException | NumberFormatException e) { System.out.println("Excepció capturada: " + e.getMessage()); } } public static int readAndConvertFile(String fileName) throws IOException, NumberFormatException { BufferedReader reader = new BufferedReader(new FileReader(fileName)); String line = reader.readLine(); reader.close(); return Integer.parseInt(line); } }
Errors Comuns i Consells
- Oblidar-se de Capturar Excepcions: Assegura't de capturar totes les excepcions que un mètode pot llançar, especialment si utilitzes
throws
. - Missatges d'Error Poc Informatius: Proporciona missatges d'error clars i descriptius quan llancis excepcions amb
throw
. - No Tancar Recursos: Quan treballis amb fitxers o altres recursos, assegura't de tancar-los adequadament per evitar fuites de recursos.
Conclusió
En aquest tema, hem après com utilitzar throw
i throws
per gestionar excepcions en Java. Aquests mecanismes són essencials per escriure codi robust i mantenible. Hem vist exemples pràctics i hem practicat amb exercicis per reforçar els conceptes apresos. Ara estàs preparat per gestionar excepcions de manera efectiva en els teus projectes Java.
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