Les excepcions són una part fonamental de la programació en Java, ja que permeten gestionar errors i situacions inesperades de manera controlada. En aquest tema, aprendrem què són les excepcions, com funcionen i com podem utilitzar-les per millorar la robustesa i la fiabilitat del nostre codi.
Què és una Excepció?
Una excepció és un esdeveniment que interromp el flux normal d'execució d'un programa. Aquest esdeveniment pot ser causat per diverses raons, com ara errors de programació, problemes amb l'entrada/sortida, o altres situacions inesperades.
Tipus d'Excepcions
En Java, les excepcions es classifiquen en dues categories principals:
-
Excepcions Verificades (Checked Exceptions):
- Aquestes excepcions es comproven en temps de compilació.
- El programador ha de gestionar-les explícitament utilitzant blocs
try-catch
o declarant-les ambthrows
. - Exemple:
IOException
,SQLException
.
-
Excepcions No Verificades (Unchecked Exceptions):
- Aquestes excepcions es comproven en temps d'execució.
- No és obligatori gestionar-les explícitament.
- Exemple:
NullPointerException
,ArrayIndexOutOfBoundsException
.
Jerarquia de les Excepcions
La classe base de totes les excepcions en Java és java.lang.Throwable
. Aquesta classe té dues subclasses principals:
- Error: Representa errors greus que normalment no poden ser gestionats pel programa (per exemple,
OutOfMemoryError
). - Exception: Representa condicions que un programa pot voler gestionar (per exemple,
IOException
).
La jerarquia es pot representar de la següent manera:
java.lang.Throwable ├── java.lang.Error └── java.lang.Exception ├── java.lang.RuntimeException └── altres excepcions verificades
Maneig d'Excepcions
Blocs Try-Catch
El bloc try-catch
s'utilitza per capturar i gestionar excepcions. La sintaxi bàsica és la següent:
try { // Codi que pot generar una excepció } catch (ExceptionType e) { // Codi per gestionar l'excepció }
Exemple Pràctic
A continuació, es mostra un exemple pràctic de com utilitzar un bloc try-catch
per gestionar una excepció:
public class ExceptionExample { public static void main(String[] args) { try { int[] numbers = {1, 2, 3}; System.out.println(numbers[5]); // Això generarà una ArrayIndexOutOfBoundsException } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Error: Intentant accedir a un índex fora dels límits de l'array."); } } }
Explicació del Codi
- Bloc
try
: Conté el codi que pot generar una excepció. En aquest cas, estem intentant accedir a un índex fora dels límits de l'array. - Bloc
catch
: Captura l'excepció generada i executa el codi per gestionar-la. Aquí, simplement imprimim un missatge d'error.
Exercicis Pràctics
Exercici 1
Escriu un programa que demani a l'usuari que introdueixi dos números i mostri el resultat de la seva divisió. Gestiona la possible excepció ArithmeticException
que es pot produir si l'usuari introdueix un zero com a divisor.
Solució
import java.util.Scanner; public class DivisionExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Introdueix el primer número: "); int num1 = scanner.nextInt(); System.out.print("Introdueix el segon número: "); int num2 = scanner.nextInt(); try { int result = num1 / num2; System.out.println("El resultat de la divisió és: " + result); } catch (ArithmeticException e) { System.out.println("Error: No es pot dividir per zero."); } } }
Exercici 2
Escriu un programa que llegeixi un fitxer de text i mostri el seu contingut per pantalla. Gestiona la possible excepció FileNotFoundException
que es pot produir si el fitxer no existeix.
Solució
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class FileReadExample { public static void main(String[] args) { try { File file = new File("example.txt"); Scanner scanner = new Scanner(file); while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.println(line); } scanner.close(); } catch (FileNotFoundException e) { System.out.println("Error: El fitxer no s'ha trobat."); } } }
Resum
En aquesta secció, hem après què són les excepcions, la seva jerarquia i com gestionar-les utilitzant blocs try-catch
. Les excepcions són una eina poderosa per millorar la robustesa del nostre codi, permetent-nos gestionar errors i situacions inesperades de manera controlada. En els següents temes, aprofundirem en altres aspectes de la gestió d'excepcions, com ara el bloc finally
i la creació d'excepcions personalitzades.
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