SlideShare una empresa de Scribd logo
EXCEPCIONES
EN JAVA
FERNANDO SOLIS
Excepcione
s
Una excepción es un evento que ocurre durante la ejecución de un programa
que rompe el flujo normal de ejecución. Cuando se habla de excepciones nos
referimos a evento excepcional.
Muchas cosas pueden generar excepciones: Errores de hardware (falla de
disco), de programa (acceso fuera de rango en arreglo), apertura de archivo
inexistente, etc.
Cuando se produce una excepción dentro de un método de Java, éste crea
un objeto que contiene información sobre la excepción y lo pasa al código
llamador.
La rutina receptora de la excepción es responsable de reaccionar a tal evento
inesperado.
Cuando creamos un objeto para la excepción y lo pasamos al código llamador
decimos que lanzamos una excepción (Throw an exception)
Si el metodo llamador no tiene un manejador de la excepción se busca hacia
atrás en la pila de llamados anidados hasta encontrarlo.
Decimos que el manejador atrapa la excepción (catch the exception)
Ventajas de usar
excepciones: Separar código
de casos de error
Supongamos que queremos hacer la tarea:
readFile {
open the file;
determine its size;
allocate that much memory;
read the file into memory;
close the file;
}
Ventajas de usar
excepciones: Separar código
de casos de error
Sin excepciones debemos hacer algo así:
errorCodeType readFile {
initialize errorCode = 0;
open the file;
if (theFileIsOpen) {
determine the length of the file;
if (gotTheFileLength) {
allocate that much memory;
if (gotEnoughMemory) {
read the file into memory;
if (readFailed) {
errorCode = -1;
}
} else {
errorCode = -2;
}
} else {
errorCode = -3;
}
close the file;
if (theFileDidntClose && errorCode == 0) {
errorCode = -4;
} else {
errorCode = errorCode and -4;
}
} else {
errorCode = -5;
}
return errorCode;
}
Ventajas de usar
excepciones: Separar código
de casos de error
Con excepciones:
readFile {
try {
open the file;
determine its size;
allocate that much memory;
read the file into memory;
close the file;
} catch (fileOpenFailed) {
doSomething;
} catch (sizeDeterminationFailed) {
doSomething;
} catch (memoryAllocationFailed) {
doSomething;
} catch (readFailed) {
doSomething;
} catch (fileCloseFailed) {
doSomething;
}
}
Excepciones
Otras ventajas de las excepciones son:
◦ Propaga los errores hacia atrás en la secuencia de llamados anidados.
◦ Se agrupan los errores según su naturaleza.
◦ Ej:
◦ Si hay más de un archivo el que se abre, basta con un código para capturar tal caso.
◦ Si se lanzan excepciones que son todas subclases de una base, basta con capturar la base para
manejar cualquiera de sus instancias derivadas.
En Java los objetos lanzados deben ser instancias de clases derivadas de
Throwable.
Ej.
Throwable e = new IllegalArgumentException(“Stack underflow”);
throw e;
O alternativamente
throw new IllegalArgumentException(“Stack underflow”);
Si una excepción no es procesada, debe ser relanzada.
Manejo de Excepciones
El manejo de excepciones se logra con el bloque try
try {
// código
} catch (StackError e )
{
// código que se hace cargo del error reportado en e
}
El bloque try puede manejar múltiples excepciones:
try {
// código
} catch (StackError e )
{
// código para manejar el error de stack
} catch (MathError me)
{
// código para manejar el error matemático indicado en me.
}
Captura de Excepciones
(completo)
El bloque try tiene la forma general:
try {
//sentencias
} catch (e-type1 e ) {
// sentencias
} catch (e-type2 e ) {
// sentencias
} ...
finally {
//sentencias
}
La cláusula finally es ejecutada con posterioridad cualquiera sea la
condición de término del try (sin o con error). Esta sección permite dejar las
cosas consistentes antes del término del bloque try.
Captura de Excepciones:
Ejemplo 1
public static void doio (InputStream in, OutputStream out) {
int c;
try { while (( c=in.read()) >=0 )
{ c= Character.toLowerCase( (char) c);
out.write( c );
}
} catch ( IOException e ) {
System.err.println(“doio: I/O Problem”);
System.exit(1);
}
}
Captura de Excepciones:
Ejemplo 2
......
try { FileInputStream infile = new FileInputStream(argv[0]);
File tmp_file = new File(tmp_name);
....
} catch (FileNotFoundException e) {
System.err.println(“Can´t open input file “+ argv[0]);
error = true;
} catch (IOException e ) {
System.err.println(“Can´t open temporary file “+tmp_name);
error = true;
}finally {
if ( infile != null) infile.close();
if (tmp_file != null) tmp_file.close();
if (error) System.exit();
}
El código de la sección finally es ejecutado no importando si el bloque try
terminó normalmente, por excepción, por return, o break.
Tipos de Excepciones
Las hay de dos tipos
Aquellas generadas por el lenguaje Java. Éstas se generan
cuando hay errores de ejecución, como al tratar de acceder
a métodos de una referencia no asignada a un objeto,
división por cero, etc.
Aquellas no generadas por el lenguaje, sino incluidas por el
programador.
El compilador chequea por la captura de las excepciones
lanzadas por los objetos usados en el código.
Si una excepción no es capturada debe ser relanzada.
Reenviando Excepciones
public static void doio (InputStream in, OutputStream out)
throws IOException // en caso de más de una excepción throws exp1, exp2
{
int c;
while (( c=in.read()) >=0 )
{
c= Character.toLowerCase( (char) c);
out.write( c );
}
}
Alternativamente:
public static void doio (InputStream in, OutputStream out) throws Throwable {
int c;
try { while (( c=in.read()) >=0 )
{ c= Character.toLowerCase( (char) c);
out.write( c );
}
} catch ( Throwable t ) {
throw t;
}
}
!!! Si el método usa la cláusula throw debe indicarlo en su declaración con la cláusula throws.
Si la excepción no es
capturada, se entiende
reenviada
En este caso el método
envía una excepción - que
aquí corresponde al mismo
objeto capturado -por lo
tanto debe declarase en la
cláusula throws.
Creación de tus propias
excepciones
Siempre es posible lanzar alguna excepción de las ya definidas en Java (IOException por ejemplo).
También se puede definir nuevas excepciones creando clases derivadas de las clases Error o Exception.
class ZeroDenominatorException extends Exception
{ private int n;
public ZeroDenominadorException () {}
public ZeroDenominadorException(String s) {
super(s);
}
public setNumerator(int _n) { n = _n}
// otros métodos de interés
}
Luego la podemos usar como en:
....
public Fraction (int n, int d) throws ZeroDenominatorException {
if (d == 0) {
ZeroDenominatorException myExc = new
ZeroDenominatorExceptio(“Fraction: Fraction with 0 denominator?”);
myExc.setNumerator(n);
throw (myExc);
....
}
Jerarquía de Excepciones
Java prohibe crear subclases de Throwable.
Cuando creemos nuestras excepciones, serán subclases de
Exception. Más sobre esto.
Java no obliga a manejar o reenviar RuntimeException.
Cuando no podemos
relanzar una excepción
Hay situaciones en que estamos obligados a manejar una excepción. Consideremos por ejemplo:
class MyApplet extends Applet {
public void paint (Graphics g) {
FileInputStream in = new FileInputStream(“input.dat”); //ERROR
....
}
}
Se crea aquí un problema porque dado que la intención es sobremontar un método de la clase
Applet - método paint- el cual no genera ninguna excepción. Si un método no genera excepciones
la función que lo sobremonta no puede lanzar excepciones (problema en Java).
Lo previo obliga a que debamos hacernos cargos de la excepción.
class MyApplet extends Applet {
public void paint (Graphics g) {
try {
FileInputStream in = new FileInputStream(“input.dat”); //ERROR
....
} catch (Exception e) {//......}
}

Más contenido relacionado

PPT
Java exceptions
PPT
Java exceptions
PPTX
11 Excepciones
PDF
Uso de Excepciones en JAVA
PDF
Clase5 controldeflujo
PPT
Mockito
PDF
Clase8 innerclasses
Java exceptions
Java exceptions
11 Excepciones
Uso de Excepciones en JAVA
Clase5 controldeflujo
Mockito
Clase8 innerclasses

La actualidad más candente (19)

PPTX
Bloqueos mutuos
PDF
Semana 3 Herencia en Java
ODP
Java 7- Java Day Guatemala
PPSX
SolucionDudas_UnidadIII.Funciones
PPTX
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018
PDF
Java::Acceso a Bases de Datos
PDF
Estructuras de control - Ciclo For
PDF
Java ArrayList Iterator
PPT
Calse 3 JAVA 2012
PDF
Semana 2 Clases y Objetos en Java
PDF
Jyoc java-cap23 j unit
PPT
Java Rmi
PPTX
Resumen 16 primeras clips
PDF
Java HashMap
PDF
Jyoc java-cap21 jse avanzado
PPT
Presentación ontologías (parte ii)
PDF
D6 a sentencias de control de flujo
PDF
Guia5 java
PDF
Ejemplosencillocon rmi
Bloqueos mutuos
Semana 3 Herencia en Java
Java 7- Java Day Guatemala
SolucionDudas_UnidadIII.Funciones
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018
Java::Acceso a Bases de Datos
Estructuras de control - Ciclo For
Java ArrayList Iterator
Calse 3 JAVA 2012
Semana 2 Clases y Objetos en Java
Jyoc java-cap23 j unit
Java Rmi
Resumen 16 primeras clips
Java HashMap
Jyoc java-cap21 jse avanzado
Presentación ontologías (parte ii)
D6 a sentencias de control de flujo
Guia5 java
Ejemplosencillocon rmi
Publicidad

Similar a EXCEPCIONES JAVA (20)

PDF
05 java excepciones
PPT
excepciones en java
PDF
Guia demanejodeexcepcionesaserciones
PPTX
Gestión de Excepciones
PDF
Tema 10 excepciones
DOCX
Mas sobre excepciones
PPT
5.manejo de excepciones
PDF
Tema 4 excepciones por gio
PDF
Exceptions (2)
PDF
Lab excepciones
PPT
1 1 5 Objetos Excepcion
 
PPT
Excepciones
PDF
Java excepciones
PDF
Jyoc java-cap12 excepciones
PDF
excepciones en java
PPTX
Manejo de Excepciones
PPTX
Capitulo 16- Excepciones en Java
PPT
PPT
Programación III (Java) - 04 Excepciones
05 java excepciones
excepciones en java
Guia demanejodeexcepcionesaserciones
Gestión de Excepciones
Tema 10 excepciones
Mas sobre excepciones
5.manejo de excepciones
Tema 4 excepciones por gio
Exceptions (2)
Lab excepciones
1 1 5 Objetos Excepcion
 
Excepciones
Java excepciones
Jyoc java-cap12 excepciones
excepciones en java
Manejo de Excepciones
Capitulo 16- Excepciones en Java
Programación III (Java) - 04 Excepciones
Publicidad

Más de mellcv (20)

PPT
INTERACCIÓN ENTRE CLASES, GENERALIZACIÓN
PPTX
INTERACCIÓN ENTRE CLASES, HERENCIAS
PPT
Asp .net
PPTX
Asp
PPTX
Eventos
PPTX
ARREGLOS EN JAVA, VECTORES Y MATRICES
PPTX
Arquitectura basada en componentes
PPT
Poc 2
PPTX
Desarrollo de software basado en componentes
PPTX
Poc
PPTX
Programacion orientada a componentes
PPTX
PAQUETES EN JAVA
PPTX
Programacion orientada a objetos 2
PPTX
Programacion orientada a objetos 1
PPTX
MODIFICADORES Y METODOS DE ACCESO
PPTX
INSTANCIAS Y CONSTRUCTORES EN JAVA
PPTX
ENTORNO DE DESARROLLO, ESTRUTURA GENERAL DE UN PROGRAMA
PPTX
Lenguaje de programacion java, conceptos
PPT
Principios fundamentales de la programación orientado a objetos
PPTX
Introduccion al lenguage java
INTERACCIÓN ENTRE CLASES, GENERALIZACIÓN
INTERACCIÓN ENTRE CLASES, HERENCIAS
Asp .net
Asp
Eventos
ARREGLOS EN JAVA, VECTORES Y MATRICES
Arquitectura basada en componentes
Poc 2
Desarrollo de software basado en componentes
Poc
Programacion orientada a componentes
PAQUETES EN JAVA
Programacion orientada a objetos 2
Programacion orientada a objetos 1
MODIFICADORES Y METODOS DE ACCESO
INSTANCIAS Y CONSTRUCTORES EN JAVA
ENTORNO DE DESARROLLO, ESTRUTURA GENERAL DE UN PROGRAMA
Lenguaje de programacion java, conceptos
Principios fundamentales de la programación orientado a objetos
Introduccion al lenguage java

Último (20)

PDF
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
DOCX
Tarea De El Colegio Coding For Kids 1 y 2
PDF
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
PDF
ACERTIJO Súper Círculo y la clave contra el Malvado Señor de las Formas. Por ...
PDF
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
PDF
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
DOCX
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PDF
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
DOCX
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
PDF
Escuela Sabática 6. A través del Mar Rojo.pdf
PDF
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
PDF
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
PPTX
caso clínico iam clinica y semiología l3.pptx
PDF
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
PDF
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
PDF
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
Tarea De El Colegio Coding For Kids 1 y 2
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
ACERTIJO Súper Círculo y la clave contra el Malvado Señor de las Formas. Por ...
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
Escuela Sabática 6. A través del Mar Rojo.pdf
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
Escuelas Desarmando una mirada subjetiva a la educación
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
caso clínico iam clinica y semiología l3.pptx
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf

EXCEPCIONES JAVA

  • 2. Excepcione s Una excepción es un evento que ocurre durante la ejecución de un programa que rompe el flujo normal de ejecución. Cuando se habla de excepciones nos referimos a evento excepcional. Muchas cosas pueden generar excepciones: Errores de hardware (falla de disco), de programa (acceso fuera de rango en arreglo), apertura de archivo inexistente, etc. Cuando se produce una excepción dentro de un método de Java, éste crea un objeto que contiene información sobre la excepción y lo pasa al código llamador. La rutina receptora de la excepción es responsable de reaccionar a tal evento inesperado. Cuando creamos un objeto para la excepción y lo pasamos al código llamador decimos que lanzamos una excepción (Throw an exception) Si el metodo llamador no tiene un manejador de la excepción se busca hacia atrás en la pila de llamados anidados hasta encontrarlo. Decimos que el manejador atrapa la excepción (catch the exception)
  • 3. Ventajas de usar excepciones: Separar código de casos de error Supongamos que queremos hacer la tarea: readFile { open the file; determine its size; allocate that much memory; read the file into memory; close the file; }
  • 4. Ventajas de usar excepciones: Separar código de casos de error Sin excepciones debemos hacer algo así: errorCodeType readFile { initialize errorCode = 0; open the file; if (theFileIsOpen) { determine the length of the file; if (gotTheFileLength) { allocate that much memory; if (gotEnoughMemory) { read the file into memory; if (readFailed) { errorCode = -1; } } else { errorCode = -2; } } else { errorCode = -3; } close the file; if (theFileDidntClose && errorCode == 0) { errorCode = -4; } else { errorCode = errorCode and -4; } } else { errorCode = -5; } return errorCode; }
  • 5. Ventajas de usar excepciones: Separar código de casos de error Con excepciones: readFile { try { open the file; determine its size; allocate that much memory; read the file into memory; close the file; } catch (fileOpenFailed) { doSomething; } catch (sizeDeterminationFailed) { doSomething; } catch (memoryAllocationFailed) { doSomething; } catch (readFailed) { doSomething; } catch (fileCloseFailed) { doSomething; } }
  • 6. Excepciones Otras ventajas de las excepciones son: ◦ Propaga los errores hacia atrás en la secuencia de llamados anidados. ◦ Se agrupan los errores según su naturaleza. ◦ Ej: ◦ Si hay más de un archivo el que se abre, basta con un código para capturar tal caso. ◦ Si se lanzan excepciones que son todas subclases de una base, basta con capturar la base para manejar cualquiera de sus instancias derivadas. En Java los objetos lanzados deben ser instancias de clases derivadas de Throwable. Ej. Throwable e = new IllegalArgumentException(“Stack underflow”); throw e; O alternativamente throw new IllegalArgumentException(“Stack underflow”); Si una excepción no es procesada, debe ser relanzada.
  • 7. Manejo de Excepciones El manejo de excepciones se logra con el bloque try try { // código } catch (StackError e ) { // código que se hace cargo del error reportado en e } El bloque try puede manejar múltiples excepciones: try { // código } catch (StackError e ) { // código para manejar el error de stack } catch (MathError me) { // código para manejar el error matemático indicado en me. }
  • 8. Captura de Excepciones (completo) El bloque try tiene la forma general: try { //sentencias } catch (e-type1 e ) { // sentencias } catch (e-type2 e ) { // sentencias } ... finally { //sentencias } La cláusula finally es ejecutada con posterioridad cualquiera sea la condición de término del try (sin o con error). Esta sección permite dejar las cosas consistentes antes del término del bloque try.
  • 9. Captura de Excepciones: Ejemplo 1 public static void doio (InputStream in, OutputStream out) { int c; try { while (( c=in.read()) >=0 ) { c= Character.toLowerCase( (char) c); out.write( c ); } } catch ( IOException e ) { System.err.println(“doio: I/O Problem”); System.exit(1); } }
  • 10. Captura de Excepciones: Ejemplo 2 ...... try { FileInputStream infile = new FileInputStream(argv[0]); File tmp_file = new File(tmp_name); .... } catch (FileNotFoundException e) { System.err.println(“Can´t open input file “+ argv[0]); error = true; } catch (IOException e ) { System.err.println(“Can´t open temporary file “+tmp_name); error = true; }finally { if ( infile != null) infile.close(); if (tmp_file != null) tmp_file.close(); if (error) System.exit(); } El código de la sección finally es ejecutado no importando si el bloque try terminó normalmente, por excepción, por return, o break.
  • 11. Tipos de Excepciones Las hay de dos tipos Aquellas generadas por el lenguaje Java. Éstas se generan cuando hay errores de ejecución, como al tratar de acceder a métodos de una referencia no asignada a un objeto, división por cero, etc. Aquellas no generadas por el lenguaje, sino incluidas por el programador. El compilador chequea por la captura de las excepciones lanzadas por los objetos usados en el código. Si una excepción no es capturada debe ser relanzada.
  • 12. Reenviando Excepciones public static void doio (InputStream in, OutputStream out) throws IOException // en caso de más de una excepción throws exp1, exp2 { int c; while (( c=in.read()) >=0 ) { c= Character.toLowerCase( (char) c); out.write( c ); } } Alternativamente: public static void doio (InputStream in, OutputStream out) throws Throwable { int c; try { while (( c=in.read()) >=0 ) { c= Character.toLowerCase( (char) c); out.write( c ); } } catch ( Throwable t ) { throw t; } } !!! Si el método usa la cláusula throw debe indicarlo en su declaración con la cláusula throws. Si la excepción no es capturada, se entiende reenviada En este caso el método envía una excepción - que aquí corresponde al mismo objeto capturado -por lo tanto debe declarase en la cláusula throws.
  • 13. Creación de tus propias excepciones Siempre es posible lanzar alguna excepción de las ya definidas en Java (IOException por ejemplo). También se puede definir nuevas excepciones creando clases derivadas de las clases Error o Exception. class ZeroDenominatorException extends Exception { private int n; public ZeroDenominadorException () {} public ZeroDenominadorException(String s) { super(s); } public setNumerator(int _n) { n = _n} // otros métodos de interés } Luego la podemos usar como en: .... public Fraction (int n, int d) throws ZeroDenominatorException { if (d == 0) { ZeroDenominatorException myExc = new ZeroDenominatorExceptio(“Fraction: Fraction with 0 denominator?”); myExc.setNumerator(n); throw (myExc); .... }
  • 14. Jerarquía de Excepciones Java prohibe crear subclases de Throwable. Cuando creemos nuestras excepciones, serán subclases de Exception. Más sobre esto. Java no obliga a manejar o reenviar RuntimeException.
  • 15. Cuando no podemos relanzar una excepción Hay situaciones en que estamos obligados a manejar una excepción. Consideremos por ejemplo: class MyApplet extends Applet { public void paint (Graphics g) { FileInputStream in = new FileInputStream(“input.dat”); //ERROR .... } } Se crea aquí un problema porque dado que la intención es sobremontar un método de la clase Applet - método paint- el cual no genera ninguna excepción. Si un método no genera excepciones la función que lo sobremonta no puede lanzar excepciones (problema en Java). Lo previo obliga a que debamos hacernos cargos de la excepción. class MyApplet extends Applet { public void paint (Graphics g) { try { FileInputStream in = new FileInputStream(“input.dat”); //ERROR .... } catch (Exception e) {//......} }