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 bloc catch 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

throw new ExceptionType("Missatge d'error");

Throws

public void methodName() throws ExceptionType1, ExceptionType2 {
    // Codi del mètode
}

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 una IllegalArgumentException si l'edat és menor de 18.
  • El bloc try-catch en el mètode main 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 una IOException.
  • Si el nom del fitxer és "fitxer_inexistent.txt", es llança una IOException.
  • El bloc try-catch en el mètode main 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

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