From 0f1c8e3e18955a8b84ae3f54568dda0a660f80da Mon Sep 17 00:00:00 2001 From: devfzn Date: Thu, 6 Jul 2023 00:01:51 -0400 Subject: [PATCH] Java Excepciones: aulas 1 a 4 --- 008_java_oo/debug_break_point.png | Bin 0 -> 12951 bytes .../src/pila_ejecucion/Flujo.java | 45 ++++ .../src/pila_ejecucion/Flujo2.java | 43 +++ .../src/pila_ejecucion/MiExcepcion.java | 11 + .../src/pila_ejecucion/MiExcepcion2.java | 11 + 008_java_oo/excepciones.md | 255 ++++++++++++++++++ 008_java_oo/primeros_pasos.md | 6 +- 7 files changed, 369 insertions(+), 2 deletions(-) create mode 100644 008_java_oo/debug_break_point.png create mode 100644 008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/Flujo.java create mode 100644 008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/Flujo2.java create mode 100644 008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/MiExcepcion.java create mode 100644 008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/MiExcepcion2.java create mode 100644 008_java_oo/excepciones.md diff --git a/008_java_oo/debug_break_point.png b/008_java_oo/debug_break_point.png new file mode 100644 index 0000000000000000000000000000000000000000..8f3e801174e9cec7b70365f03b77ab715b7dbdea GIT binary patch literal 12951 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 AbpQYW literal 0 HcmV?d00001 diff --git a/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/Flujo.java b/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/Flujo.java new file mode 100644 index 0000000..286290e --- /dev/null +++ b/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/Flujo.java @@ -0,0 +1,45 @@ +package pila_ejecucion; + +public class Flujo { + + public static void main(String[] args) { + System.out.println("Inicio Main"); + metodo1(); + System.out.println("Fin Main"); + } + + public static void metodo1(){ + System.out.println("Inicio Método1"); + metodo2(); + System.out.println("Fin Método1"); + } + + public static void metodo2(){ + System.out.println("Inicio Método2"); + for(int i=1; i<= 4; i++){ + try { + if (i == 2) { + int num = 0; + int resultado = i/num; + System.out.println("Resultado: "+resultado); + } else if (i == 3) { + Cuenta c = null; + c.depositar(); + } else { + String resultado = null; + System.out.println("Resultado: "+resultado.toString()); + } + } catch (ArithmeticException | NullPointerException e) { + System.out.println(e.getMessage()); + e.printStackTrace(); + } + } + System.out.println("Fin Método2"); + } + + public class Cuenta { + void depositar() { + + } + } +} \ No newline at end of file diff --git a/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/Flujo2.java b/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/Flujo2.java new file mode 100644 index 0000000..94d52bb --- /dev/null +++ b/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/Flujo2.java @@ -0,0 +1,43 @@ +package pila_ejecucion; + +public class Flujo2 { + + public static void main(String[] args) { + System.out.println("Inicio Main"); + metodo1(); + System.out.println("Fin Main"); + } + + public static void metodo1(){ + System.out.println("Inicio Método1"); + try { + metodo2(); + } catch (ArithmeticException | MiExcepcion ae) { + //System.out.println("Excepción: "+ae.getMessage()); + ae.printStackTrace(); + } + System.out.println("Fin Método1"); + } + + public static void metodo2(){ + System.out.println("Inicio Método2"); + //ArithmeticException ae = new ArithmeticException(); + //throw ae; + //throw new ArithmeticException("Error aritmético"); + //throw new MiExcepcion("Mi excepción"); + try { + metodo3(); + } catch (MiExcepcion2 e2) { + e2.printStackTrace(); + } + //System.out.println("Fin Método2"); + } + + public static void metodo3() throws MiExcepcion2 { + throw new MiExcepcion2("Mi excepcion 2"); + } + + public class Cuenta { + void depositar() {} + } +} \ No newline at end of file diff --git a/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/MiExcepcion.java b/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/MiExcepcion.java new file mode 100644 index 0000000..2892226 --- /dev/null +++ b/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/MiExcepcion.java @@ -0,0 +1,11 @@ +package pila_ejecucion; + +public class MiExcepcion extends RuntimeException { + public MiExcepcion() { + super(); + } + + public MiExcepcion(String mensaje) { + super(mensaje); + } +} diff --git a/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/MiExcepcion2.java b/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/MiExcepcion2.java new file mode 100644 index 0000000..4aef778 --- /dev/null +++ b/008_java_oo/eclipse/pila_ejecucion/src/pila_ejecucion/MiExcepcion2.java @@ -0,0 +1,11 @@ +package pila_ejecucion; + +public class MiExcepcion2 extends Exception { + public MiExcepcion2() { + super(); + } + + public MiExcepcion2(String mensaje) { + super(mensaje); + } +} diff --git a/008_java_oo/excepciones.md b/008_java_oo/excepciones.md new file mode 100644 index 0000000..df6e1ca --- /dev/null +++ b/008_java_oo/excepciones.md @@ -0,0 +1,255 @@ +# Lanzar y controlar [Excepciones](https://app.aluracursos.com/course/java-excepciones) + + +## Pila de ejecución + +Ejemplo visual del [flujo](./eclipse/pila_ejecucion/src/pila_ejecucion/Flujo.java) +de ejecución + +```java +public class Flujo { + + public static void main(String[] args) { + System.out.println("Inicio Main"); + metodo1(); + System.out.println("Fin Main"); + } + + public static void metodo1(){ + System.out.println("Inicio Método1"); + metodo2(); + System.out.println("Fin Método1"); + } + + public static void metodo2(){ + System.out.println("Inicio Método2"); + for(int i =1; i<= 5; i++){ + System.out.println("i:"+i); + } + System.out.println("Fin Método2"); + } +} +``` + +Punto de interrupción **breakpoint** en el IDE + +![img](./debug_break_point.png) + +## Excepciones + +Induciendo error en `metodo2()`, clase +[Flujo.java](./eclipse/pila_ejecucion/src/pila_ejecucion/Flujo.java) + +```java + public static void metodo2(){ + System.out.println("Inicio Método2"); + for(int i =1; i<= 5; i++){ + System.out.println("i:"+i); + } + System.out.println("Fin Método2"); + } +``` + +```java +Exception in thread "main" java.lang.ArithmeticException: / by zero <- Tipo de Excepción, donde/cuando + at pila_ejecucion.Flujo.metodo2(Flujo.java:19) <- último elemento de la pila + at pila_ejecucion.Flujo.metodo1(Flujo.java:12) <- segundo elemento de la pila + at pila_ejecucion.Flujo.main(Flujo.java:7) <- primer elemento de la pila +``` + +- Donde y Tipo de Excepción se produce +- Rastro, **traceback** de los elementos en la pila de ejecución + +## Manejo de excepciones + +```java + public static void metodo2(){ + System.out.println("Inicio Método2"); + for(int i =1; i<= 5; i++){ + try { + //int num = 0; + //int resultado = i/num; + //System.out.println("Resultado: "+resultado); + String resultado = null; + System.out.println("Resultado: "+resultado.toString()); + } catch (ArithmeticException e) { + System.out.println(e.getMessage()); + e.printStackTrace(); + } catch (NullPointerException e) { + System.out.println(e.getMessage()); + e.printStackTrace(); + } + } + System.out.println("Fin Método2"); + } +``` + +### Creación de excepciones + +Clase [Flujo2.java](./eclipse/pila_ejecucion/src/pila_ejecucion/Flujo2.java) + +### Ejemplo excepción propia ArithmeticException + +```java +public class Flujo2 { + + public static void main(String[] args) { + System.out.println("Inicio Main"); + metodo1(); + System.out.println("Fin Main"); + } + + public static void metodo1(){ + System.out.println("Inicio Método1"); + try { + metodo2(); + } catch (ArithmeticException ae) { + ae.printStackTrace(); + } + System.out.println("Fin Método1"); + } + + public static void metodo2(){ + System.out.println("Inicio Método2"); + //ArithmeticException ae = new ArithmeticException(); + //throw ae; + throw new ArithmeticException("Error Aritmético"); + } +} +``` + +```java +Inicio Main +Inicio Método1 +Inicio Método2 +java.lang.ArithmeticException: Error aritmético + at pila_ejecucion.Flujo2.metodo2(Flujo2.java:26) + at pila_ejecucion.Flujo2.metodo1(Flujo2.java:14) + at pila_ejecucion.Flujo2.main(Flujo2.java:7) +Fin Método1 +Fin Main +``` + +### Ejemplo clase exception propia heredando de RuntimeException + +```java + ... + public static void metodo1() { + System.out.println("Inicio Método1"); + try { + metodo2(); + } catch (MiExepcion me) { + me.printStackTrace(); + } + System.out.println("Fin Método1"); + } + + public static void metodo2(){ + System.out.println("Inicio Método2"); + throw new MiExcepcion("Mi excepción"); + } +} +``` + +```java +Inicio Main +Inicio Método1 +Inicio Método2 +pila_ejecucion.MiExcepcion: Mi excepción + at pila_ejecucion.Flujo2.metodo2(Flujo2.java:27) + at pila_ejecucion.Flujo2.metodo1(Flujo2.java:14) + at pila_ejecucion.Flujo2.main(Flujo2.java:7) +Fin Método1 +Fin Main +``` + +### Ejemplo clase exception propia heredando de RuntimeException + +```java + ... + public static void metodo1(){ + System.out.println("Inicio Método1"); + try { + metodo2(); + } catch (MiExcepcion2 me2) { + me2.printStackTrace(); + } + System.out.println("Fin Método1"); + } + + public static void metodo2() throws MiExcepcion2 { + System.out.println("Inicio Método2"); + throw new MiExepcion2("Mi excepción 2"); + } +``` + +```java +Inicio Método1 +Inicio Método2 +pila_ejecucion.MiExcepcion2: Mi excepcion 2 + at pila_ejecucion.Flujo2.metodo2(Flujo2.java:29) + at pila_ejecucion.Flujo2.metodo1(Flujo2.java:14) + at pila_ejecucion.Flujo2.main(Flujo2.java:7) +Fin Método2 +Fin Método1 +Fin Main +``` + + + +```mermaid +%%{init: {'theme':'dark'}}%% +classDiagram +Throwable --|> Exception +Exception --|> RuntimeException +Exception --|> MiExepcion2 +Throwable --|> Error +RuntimeException --|> ArithmeticException +RuntimeException --|> NullPointerException +RuntimeException --|> MiExepcion +Error --|> StackOverFlow +``` + +## Excepciones UN/CHECKED + +- **UNCHECKED** Excepciones no verificadas por el compilador. +- **CHECKED** Excepciones verificadas, el compilador nos obliga a informar +que se lanzara esta excepción, ***throws***. + + +### Sumario + +- Existe una gran jerarquía de clases que representan excepciones. Por ejemplo, +**ArithmeticException** es hija de **RuntimeException**, que hereda de Exception, +que a su vez es hija de la clase de excepciones más ancestral, **Throwable**. +Conocer bien esta jerarquía significa saber cómo usar las excepciones en su +aplicación. + +- **Throwable** es la clase que debe extenderse para poder lanzar un objeto en +la **pila** (usando la palabra reservada ***throw***) + +- Es en la clase **Throwable** donde tenemos casi todo el código relacionado con +las excepciones, incluyendo `getMessage()` e `printStackTrace()`. El resto de la +jerarquía tiene solo algunas sobrecargas de constructores para comunicar mensajes +específicos. + +- La jerarquía que comenzó con la clase **Throwable** se divide en excepciones +y errores. Las **excepciones** se utilizan en los **códigos de aplicación**. Los +**errores** son utilizados exclusivamente por la **máquina virtual**. + +- Las clases que heredan de Error se utilizan para informar errores en la máquina +virtual. Los desarrolladores de aplicaciones no deben crear errores que hereden +de Error. + +- **StackOverflowError** es un error de **máquina virtual** para informar que la +pila de ejecución no tiene más memoria. + +- Las excepciones se dividen en dos categorías amplias: las que el compilador +comprueba obligatoriamente y las que no. + + - Los primeros se denominan **checked** y se crean por pertenecer a una jerarquía + que no pasa **RuntimeException**. + + - Los segundos están **unchecked** y se crean como descendientes de + **RuntimeException**. + diff --git a/008_java_oo/primeros_pasos.md b/008_java_oo/primeros_pasos.md index 86b9b31..eee23fa 100644 --- a/008_java_oo/primeros_pasos.md +++ b/008_java_oo/primeros_pasos.md @@ -12,6 +12,7 @@ de jetbrains (2022). ```mermaid +%%{init: {'theme':'dark'}}%% graph TD A(Código Java)-->B(Ejecutable JAR) B-->C(Máquina Virtual JVM) @@ -187,13 +188,14 @@ public class HolaMundo { ## Primeros Pasos ```mermaid +%%{init: {'theme':'dark'}}%% flowchart LR subgraph JDK subgraph JRE c(JVM) - style c fill:#f9f,stroke:#000,stroke-width:2px + style c fill:#3f3f3f,stroke:#000,stroke-width:2px d(Librerías) - style d fill:#f9f,stroke:#000,stroke-width:2px + style d fill:#3f3f3f,stroke:#000,stroke-width:2px end a(Tools) end