> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud2-programacion-estructurada/excepcions.md).

# Excepcións

Unha **excepción** é unha situación que se orixina durante a execución do programa que require que este acabe dun xeito inmediato ou que faga unha acción especial para tratala. Por exemplo un intento de división entre 0; un acceso a unha posición dun vector fora dos seus límites ou un erro durante a lectura de datos.

Cando se produce unha excepción no programa dicimos que se **lanza unha excepción**. O mecanismo de tratamento de excepcións pódese resumir no seguinte: transferir o control dende o lugar do programa no que aconteceu a excepción a un xestor, presente no programa, que a captura é a trata.

Ademais das excepcións, poden producirse erros. Un **erro** representa unha situación anormal e irreversible. Xeralmente son situacións que se escapan ao control do programador, e polo tanto, non son tratadas.

Hai diferentes tipos de excepcións. Todas elas son subclases de `Exception`<i class="fa-copy">:copy:</i>, mentres que os erros son subclases de `Error`. Ambas son subclases de `Throwable`<i class="fa-copy">:copy:</i>.

{% hint style="warning" %}
Documentación oficial: <https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html>
{% endhint %}

| **MÉTODO**              | **DESCRICIÓN**                                      | **EXEMPLO**                                     |
| ----------------------- | --------------------------------------------------- | ----------------------------------------------- |
| **`getMessage()`**      | Devolve a mensaxe de erro que describe a excepción  | `e.getMessage()` → "Número non válido"          |
| **`printStackTrace()`** | Mostra por pantalla o camiño que seguiu a excepción | `e.printStackTrace()` → Ver liña de erro        |
| **`toString()`**        | Devolve o tipo de excepción + mensaxe               | `e.toString()` → "java.lang.Exception: Erro..." |
| **`getCause()`**        | Devolve a excepción que causou esta excepción       | `e.getCause()` → Excepción orixinal             |

## Lanzamento de excepcións

En determinados casos pode ser útil lanzar unha excepción dende dentro dun determinado método. Isto pode utilizarse como un medio para indicar que algo está sucedendo e non é posible continuar coa execución normal do método. Para lanzar unha excepción utilizamos a seguinte expresión:

```java
throw obxecto_excepcion;
```

Cando se lanza unha excepción marcada dende un método esta debe ser declarada no prototipo do método. Isto hai que indicalo cá palabra reservada `throw`, tal e como se amosa no seguinte exemplo:

```java
void metodo() throws Excepcion1, Excepcion2 {
    // código do método
}
```

Un exemplo de código no que se lanzan excepcións sería o seguinte:

```java
public class PruebaExcepcion {

    static boolean esPar(int num) throws Exception{
        if (num<0)
            throw new Exception("El número tiene que ser mayor que 0");
        return (num%2==0);
    }

    public static void main(String[] args) throws Exception {
        System.out.println(esPar(6));
        System.out.println(esPar(-2));
    }
}
```

A saída que produciría sería a seguinte:

<figure><img src="/files/HW7W5iWAEsmYAgjvhsCC" alt=""><figcaption></figcaption></figure>

## Captura de excepcións

A captura de excepción vai a realizarse a partir do uso de un bloque **try-catch**

```java
try{
    // Sección de código que pode lanzar unha excepción
} catch(UnhaExcepcion e){
    // Sección que manexa a excepción "UnhaExcepcion"
}
```

O bloque `try` delimita aquela ou aquelas instrucións onde se pode producir unha excepción. Se isto sucede, o control do programa transfírese ao bloque `catch` definido para o tipo de excepción que se produciu, pasando como parámetro o obxecto do tipo da excepción que se creou.

O bloque `catch` define as instrucións que se deberán executar en caso de que se produza un determinado tipo de excepción.

```java
public class PruebaExcepcion {

    static boolean esPar(int num) throws Exception{
        if (num<0)
            throw new Exception("El número tiene que ser mayor que 0");
        return (num%2==0);
    }

    public static void main(String[] args) {
        try {
            System.out.println(esPar(6));
            System.out.println(esPar(-2));
        } catch (Exception e) {
            System.out.println("Se ha producido un error!");
            System.out.println("Mensaje: " + e.getMessage());
            e.printStackTrace();
        }

    }
}
```

<figure><img src="/files/koCGR43ToN2RqS28Jop4" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud2-programacion-estructurada/excepcions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
