Programación Orientada a Objetos Excepciones La clausula finally El bloque finally siempre se ejecuta al salir del bloque try, sin importar que haya salido por qué: 1. Llegó al final del bloque de manera normal 2. Se encontró un break, continue o return 3. Se atrapó una excepción con una de las clausulas catch anteriores 4. Se presentó una excepción que no fue atrapada Cecilia Curlango Rosas 2/17 public class TestFinally { public static void main(String[] args) { } } try { int valor = Integer.parseInt(args[0]); System.out.println(15 / valor); } catch (ArithmeticException e) { System.err.println("División entre 0"); e.printStackTrace(); } finally { System.out.println("Gracias por participar"); } System.out.println("Adios"); Cecilia Curlango Rosas 3/17 public class TestFinally { public static void main(String[] args) { } } try { int valor = Integer.parseInt(args[0]); System.out.println(15 / valor); } catch (ArithmeticException e) { System.err.println("División entre 0"); e.printStackTrace(); } finally { System.out.println("Gracias por participar"); } System.out.println("Adios"); Cecilia Curlango Rosas 4/17 public class TestFinally { public static void main(String[] args) { } } try { int valor = Integer.parseInt(args[0]); System.out.println(15 / valor); } catch (ArithmeticException e) { System.err.println("División entre 0"); e.printStackTrace(); } finally { System.out.println("Gracias por participar"); } System.out.println("Adios"); Cecilia Curlango Rosas 5/17 ¿Cómo genero una excepción? Crear un objeto de tipo excepción como cualquier otro objeto. ● Utilizar la instrucción throw para lanzar la excepción. ● ● Ejemplo: throw new ArithmeticException(“prueba”); Cecilia Curlango Rosas 6/17 public class Main { public static void main(String[] args) { } // pruebas de excepciones try{ int num = Integer.parseInt(args[0]); if (num<0){ throw new NumberFormatException("Número negativo"); } else { System.out.println("Número positivo: " + num); } } catch(IndexOutOfBoundsException exc2) { System.out.println("faltó un argumento"); } catch(NumberFormatException exp) { System.out.println(exp); exp.printStackTrace(); } finally { System.out.println("Gracias"); } Cecilia Curlango Rosas 7/17 Cecilia Curlango Rosas 8/17 Métodos y excepciones Los métodos que lanzan excepciones deben anunciar en el momento en que se declaran, cuáles excepciones lanzan. ● Cecilia Curlango Rosas 9/17 Un método lanza una excepción public class Rectangle { private int width = 0; private int height = 0; private Point origin; public int getArea() throws NumberFormatException { if (width == 0 || height == 0) { throw new NumberFormatException("Medida de lados cero."); } return width * height; } } Cecilia Curlango Rosas 10/17 Constructor lanza una excepción public class Rectangle { private int width = 0; private int height = 0; private Point origin; public Rectangle() { origin = new Point(0, 0); } public Rectangle(int w, int h) throws NumberFormatException { } } origin = new Point(0, 0); if (w <= 0 || h <= 0) { throw new NumberFormatException("Medida de lados negativa."); } width = w; height = h; Cecilia Curlango Rosas 11/17 public class PruebaRectangulo { public static void main(String[] args) { Rectangle noGood; } } try { noGood = new Rectangle(-4, 5); } catch (NumberFormatException e) { System.out.println("Error al crear el rectangulo: " + e.getMessage()); e.printStackTrace(); } Cecilia Curlango Rosas 12/17 Cecilia Curlango Rosas 13/17 Crear Excepciones Cecilia Curlango Rosas 14/17 Definir la Excepción Extiende Exception Cecilia Curlango Rosas 15/17 Alguna Clase Generará la Excepción Cecilia Curlango Rosas 16/17 Atrapar la Excepción Cecilia Curlango Rosas 17/17