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
throws'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 bloccatchcorresponent, si n'hi ha.
Throws
- La paraula clau
throwss'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
checkAgellança unaIllegalArgumentExceptionsi l'edat és menor de 18. - El bloc
try-catchen el mètodemaincaptura 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
readFiledeclara que pot llançar unaIOException. - Si el nom del fitxer és "fitxer_inexistent.txt", es llança una
IOException. - El bloc
try-catchen el mètodemaincaptura 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
