excepciones -...
TRANSCRIPT
![Page 1: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/1.jpg)
Excepciones
M.C. Yolanda Moyao Martínez
![Page 2: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/2.jpg)
Excepción
Evento que ocurre durante la ejecución del programa que interrumpe el flujo normal de las sentencias.
Cuando un programa viola las restricciones semánticas del lenguaje (se produce un error)
La máquina virtual Java comunica este hecho al programa mediante una excepción
![Page 3: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/3.jpg)
Ventajas
Separar el manejo de errores del código “normal”.
Propagar los errores sobre la pila de llamadas.
Desde el primer método que llamo a los diversos métodos hasta que lleguemos al error.
Agrupar errores y clasificar
![Page 4: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/4.jpg)
![Page 5: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/5.jpg)
Errores
Representan situaciones de error
normalmente no recuperables
El programador normalmente no tiene que proporcionar un tratamiento para ellas
Ejemplos
No se puede localizar y cargar una clase
Se agota la memoria
![Page 6: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/6.jpg)
Excepciones
Predefinidas en el sistema
Se lanzan automáticamente cuando se realiza alguna operación no valida
Acceso a un objeto que no existe
Acceso a una posición de un array que no existe
División por cero
![Page 7: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/7.jpg)
Excepciones
Generadas por el programador
El programa explícitamente genera una excepción al detectar una situación de error que no se puede resolver en ese contexto
Útil en situaciones de prueba y depuración
![Page 8: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/8.jpg)
Throw
Cuando ocurre lo anterior, la máquina virtual Java crea un objeto de la clase exception o error y se notifica el hecho al sistema de ejecución.
Se dice que se ha lanzado una excepción (“Throwing Exception”).
![Page 9: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/9.jpg)
Catch Exception
En el momento en que es lanzada una excepción, la máquina virtual Java recorre la pila de llamadas de métodos en busca de alguno que sea capaz de tratar la clase de excepción lanzada.
![Page 10: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/10.jpg)
Ejemplo
public class error{
public static void main(String[] arg)
{ int diez[]= new int[10];
diez[12]=10;}
Exception in trhead “main” java.lang.ArrayIndexOutOfBoundsException:12 at error.main(main.java:7)
![Page 11: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/11.jpg)
Ejemplo
public class Excepciones2 {
public static void main(String[] arg)
{ metodo(); }
static void metodo() {
int divisor = 0;
int resultado = 100/divisor;
System.out.println(“Resultado: ” + resultado);
System.out.println(“Una Suma:” + (3+4));
}}
![Page 12: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/12.jpg)
Al ejecutar
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Excepciones2.metodo(Excepciones2.java:7)
at Excepciones2.main(Excepciones2.java:3)
Process completed.
![Page 13: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/13.jpg)
Descripción
la máquina virtual Java ha detectado una condición de error y ha creado un objeto de la clase java.lang.ArithmeticException.
El método donde se ha producido la excepción no es capaz de tratarla
Se trata por la máquina virtual Java, que muestra el mensaje de error anterior y finaliza la ejecución del programa.
![Page 14: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/14.jpg)
Jerarquía de excepciones
![Page 15: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/15.jpg)
Excepciones-problemas
En java disponemos de un mecanismo consistente en el uso de bloques try/catch/finally
Los tipos de error que se generan son todos ellos clases, que heredan de la clase java.lang.Exception
Por lo tanto podríamos crear nuestros propios errores personalizados.
![Page 16: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/16.jpg)
Sintaxis
try{ //Este código puede lanzar una
excepción }
catch(Exception ex){ //Este código se
ejecuta cuando se produce una excepción
}
finally{ //Este código se ejecuta se
produzca o no una excepción }
![Page 17: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/17.jpg)
Zonas
try, o zona de pruebas, donde pondremos las instrucciones problemática.
una o más zonas catch, cada una especializada en un tipo de error o excepción.
zona finally, encargada de tener un código que se ejecutará siempre, independientemente de si se produjeron o no errores. Libera recursos
![Page 18: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/18.jpg)
Ejemplo 1 public class Try3 {
public static void main(String arg[]) {
int [] array = new int[20];
try { // array[-3] = 24;
int b = 0;
int a = 23/b; } catch(ArrayIndexOutOfBoundsException excepcion) {
System.out.println(" Error de índice en un array"); } catch(ArithmeticException excepcion) {
System.out.println(" división por cero"); } } }
se ejecuta el catch correspondiente al tipo de error generado.
![Page 19: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/19.jpg)
Ejemplo sentencias catch múltiples
class MultiCatch{
public static void main (String args[]){
try {
int a = args.length;
System.out.println(“a=”+a);
int b=42/a;
int c[]={1};
c[42]=99;
} catch(ArithmeticException e){
System.out.println(“División por 0:”+e);}
catch(ArrayIndexOutOfBounsException e){
System.out.println(“Indice fuera de límite”+e);}
System.out.println(“Después de try/catch”);
}}
![Page 20: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/20.jpg)
Clase excepcion
Proporciona algunos métodos de utilidad, por ejemplo
printStackException
Muestra el volcado de pila con todos los métodos que están siendo llamados en el momento en el que se lanzó el error:
![Page 21: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/21.jpg)
Volcado de la pila
![Page 22: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/22.jpg)
Ejemplo
try { array[-3] = 24; } catch(Exception excepcion)
{
excepcion.printStackTrace();
}
![Page 23: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/23.jpg)
Generando excepciones-usuario
Para que se pueda lanzar una excepción es necesario crear un objeto de tipo Exception o alguna de sus subclases como ArithmeticException y lanzarlo mediante la instrucción throw
class LanzaExcepcion {public static void main(String argumentos[]) //throws ArithmeticException
{
int i=1, j=2;
if (i/j< 1)
throw new ArithmeticException();
else
System.out.println(i/j);
} }
![Page 24: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/24.jpg)
Constructores ------excepciones
Todas las excepciones que están en el núcleo de Java tienen 2 constructores:
Uno sin parámetros
Otro que tiene un parámetro de tipo cadena
![Page 25: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/25.jpg)
throw –lanzar un error
public class Try5 {
public static void main(String arg[]) {
try {
Exception e = new Exception("Este es mi propio error.");
throw e; }
catch(Exception excepcion) { excepcion.printStackTrace();
} } }
![Page 26: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/26.jpg)
Ejecución
java.lang.Exception: Este es mi propio error.
at Try5.main(Try5.java:4)
Process completed.
![Page 27: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/27.jpg)
Clase personalizada y throw
class MiPropioError extends Exception{ public MiPropioError(String mensaje){ super(mensaje); } }
public class Try7 {
public static void main(String arg[]) {
try { MiPropioError e = new MiPropioError("Este es mi propio error."); throw e; }
catch(Exception excepcion) { excepcion.printStackTrace(); } } }
![Page 28: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/28.jpg)
Ejecución
MiPropioError: Este es mi propio error.
at Try7.main(Try7.java:3)
Process completed.
![Page 29: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/29.jpg)
Finally-libera recursos
Dentro de try solicitamos recursos y trabajamos con ellos
La única manera de liberar recursos independientemente de si se lanza una excepción o no
Consiste en emplear una claúsula finally, que será ejecutada siempre, haya o no haya lanzamiento de excepciones.
![Page 30: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/30.jpg)
Ejemplo
public class Try6 {
public static void main(String arg[]) {
try { Exception e = new Exception("Este es mi propio error."); throw e; }
catch(Exception excepcion) { excepcion.printStackTrace(); }
finally { System.out.println("Se ejecuta finally"); } } }
![Page 31: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/31.jpg)
Ejecución
java.lang.Exception: Este es mi propio error.
at Try6.main(Try6.java:3)
Se ejecuta finally
![Page 32: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/32.jpg)
Jerarquía de clases
Una subclase debe estar antes que su superclase en una serie de sentencias catch.
Si no se produce un error en la compilación “código inalcanzable”
![Page 33: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/33.jpg)
Ejemplo
class SuperSubCatch {
public static void main(String args[]){
try{
int a=0;
int b = 42/a;
}
catch (Exception e){
System.out.println("sentencia catch para cualquier tipo de exception");
}
/* esta sentencia catch nunca se ejcutará ya que ArithmeticException es una subclase de Exception*/
catch(ArithmeticException e) {// ERROR no alcanzable
System.out.println("esto nunca se ejecuta");
}}}
![Page 34: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/34.jpg)
Practica 12
Hacer un programa que maneje cuentas de un banco con las opciones de capturar datos de cuenta y clientes y transferencia de dinero.
Utiliza excepeciones para cancelar la transferencia si no hay fondos
![Page 35: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/35.jpg)
Tarea 12. ejecutar la excepciónpublic class ExcepcionApp {
public static void main(String[] args) {
String str1="12";
String str2="0";
String respuesta;
int numerador, denominador, cociente;
try{
numerador=Integer.parseInt(str1);
denominador=Integer.parseInt(str2);
cociente=numerador/denominador;
respuesta=String.valueOf(cociente);
}catch(NumberFormatException ex){
respuesta="Se han introducido caracteres no numéricos";
}catch(ArithmeticException ex){
respuesta="División entre cero";
}
System.out.println(respuesta); }}
![Page 36: Excepciones - ymoyao.cs.buap.mxymoyao.cs.buap.mx/wp-content/uploads/2016/01/Excepciones10Prog2.pdfAcceso a una posición de un array que no existe División por cero. ... Java recorre](https://reader031.vdocuments.pub/reader031/viewer/2022021721/5bd491be09d3f219338c4f62/html5/thumbnails/36.jpg)
Investigar 3 métodos de las subclases de Exeption
Hacer un programa usando cada uno de los métodos