Documentos de Académico
Documentos de Profesional
Documentos de Cultura
JAVA / EXCEPCIONES
EXCEPCIONES
1
1 5 / 0 8 / 2 0 1 0
EXCEPCIONES
EXCEPCIONES
2
1 5 / 0 8 / 2 0 1 0
EXCEPCIONES
EXCEPCIONES
Cada tipo de excepcin esta representada por
una subclase de Exception mientras que los
errores son subclases de Error.
Error Ambas clases,
Exception y Error,
Error son subclases de Trhowable.
Trhowable
object
Throwable
Exception Error
Excepciones Errores
3
1 5 / 0 8 / 2 0 1 0
CLASES DE EXCEPCIN
RuntimeException
IOException
SQLException ..
ArithmeticException
NullPointerException
IndexOutOfBoundException
ClassCastException
4
1 5 / 0 8 / 2 0 1 0
TIPOS DE EXCEPCIONES
EXCEPCIONES MARCADAS.
Captura obligatoria.
Se producen al invocar ciertos mtodos de
determinadas clases y son generadas (lanzadas).
Todas as clases de excepciones, salvo
RuntimeException y sus subclases, pertenecen a
este tipo.
Un ejemplo de excepcin marcada es IOException.
IOException
Esta excepcin es lanzada por el mtodo
readLine()
readLine() de la clase BufferedReader cuando se
produce un error durante la operacin de lectura.
5
1 5 / 0 8 / 2 0 1 0
EXCEPCIONES MARCADAS.
6
1 5 / 0 8 / 2 0 1 0
EXCEPCIONES NO MARCADAS
EXCEPCIONES NO MARCADAS
No es obligatorio capturar dentro de un programa
java una excepcin no marcada, el motivo es que
gran parte de ellas (NullPointerException
NullPointerException,
NullPointerException,
ClassCastException,
ClassCastException, etc.
etc.,) se producen como
consecuencia de una mala programacin, por lo
que la solucin no debe pasar por prepara al
programa para que sea capaz de recuperarse ante
una situacin como sta, sino por evitar que se
produzca. Tan slo las excepciones de tipo
ArithmeticException es recomendable capturarlas.
7
1 5 / 0 8 / 2 0 1 0
EXCEPCIONES NO MARCADAS
8
1 5 / 0 8 / 2 0 1 0
CAPTURA DE EXCEPCIONES
try
{
// instrucciones donde se pueden producir excepciones
}
catch
{
}
finally
{
}
Proporcionan una forma elegante y estructurada de capturar
excepciones dentro de un programa java,
CAPTURA DE EXCEPCIONES
9
1 5 / 0 8 / 2 0 1 0
CAPTURA DE EXCEPCIONES
CAPTURA DE EXCEPCIONES
catch : debe considerar lo siguiente:
Puede haber tantos bloques catch
como considere necesario.
Cada catch servir para tratar un
determinado tipo de excepcin.
No pudiendo haber dos o mas catch
que tengan declarada la misma clase
de excepcin.
excepcin
1 0
1 5 / 0 8 / 2 0 1 0
CAPTURA DE EXCEPCIONES
Un bloque catch sirve para capturar cualquier
excepcin que se corresponde con el tipo
declarado o cualquiera de sus subclases.
Catch (RuntimeException e)
{
:
}
Producira cualquiera (NullPointerException,
ArithmeticException, etc.)
CAPTURA DE EXCEPCIONES
1 1
1 5 / 0 8 / 2 0 1 0
CAPTURA DE EXCEPCIONES
finally.
finally. Una vez terminada la ejecucin, el
control del programa se transferir al bloque
finally o si no existe a la instruccin siguiente al
ultimo bloque catch.
CAPTURA DE EXCEPCIONES
public class PruebaExcepcion
{
public static void main (String[] args)
{
try
{
int s=4/0;
System.out.println("el programa sigue");
}
catch (ArithmeticException e)
{
System.out.println("division por cero");
}
catch (Exception e)
{
System.out.println("excepcion general");
}
System.out.println("fin de main");
}
}
1 2
1 5 / 0 8 / 2 0 1 0
CAPTURA DE EXCEPCIONES
El control del programa nunca se devuelve al
lugar donde se producido la excepcin.
En el caso de que existan varios catch cuyas
excepciones estn relacionadas por la
herencia, los catch mas especficos deben de
estar situados por delante de los mas
genricos. De no ser as, se producir un error
de compilacin puesto que los bloques catch
mas especficos nunca se ejecutaran.
CAPTURA DE EXCEPCIONES
public class PruebaExcepcion
{
public static void main (String[] args)
{
try
{
int s=4/0;
System.out.println("el programa sigue");
}
catch (Exception e)
{
System.out.println("excepcion general");
}
catch (ArithmeticException e)
{
System.out.println("division por cero");
}
System.out.println("fin de main");
}
}
1 3
1 5 / 0 8 / 2 0 1 0
CAPTURA DE EXCEPCIONES
CAPTURA DE EXCEPCIONES
Mtodo 1
Llamadas a mtodo
Mtodo 2
..Llamadas a mtodo
Propagacin de la excepcin
Mtodo n
Excepcin no
tratada X
Propagacin de la excepcin
1 4
1 5 / 0 8 / 2 0 1 0
CAPTURA DE EXCEPCIONES
CAPTURA DE EXCEPCIONES
finally:
Se ejecuta tanto si se produces una excepcin o
no.
Si se produce una excepcin este se ejecuta
despus del bloque catch.
El bloque finally se ejecutar antes de propagar la
excepcin.
Si no se produce excepcin alguna en el interior
de try, el bloque finally se ejecutar tras la ultima
instruccin del try.
1 5
1 5 / 0 8 / 2 0 1 0
CAPTURA DE EXCEPCIONES
public class Excepcion
{
public static void main (String[] args)
{
try
{
int s=4/0;
System.out.println("el programa sigue");
}
catch (ArithmeticException e)
{
System.out.println("division por cero");
}
catch (Exception e)
{
System.out.println("excepcion general");
}
finally
{
System.out.println("ejecucion de finally"); Aun existiendo una instruccin para
}
System.out.println("fin de main");
la salida del mtodo (return), el
}
bloque finally se ejecutar antes de
} que esto suceda
1 6
1 5 / 0 8 / 2 0 1 0
finally
{
System.out.println("ejecucion de finally");
}
System.out.println("fin de main");
}
static void imprime(BufferedReader bf) throws IOException
{
String n=bf.readLine(); //puede provocar una excepcion
System.out.println(n);
}
}
1
7
1 5 / 0 8 / 2 0 1 0
EJEMPLO CAJERO
public class Cajero
{
public static void main (String[] args)
{
Cuenta c=new Cuenta();
try
{
c.ingresar(100);
c.extraer(200);
}
catch (Exception e)
{
System.out.println("la cuenta no puede "+
" quedar en numeros rojos");
//lo ideal es manejar este objeto
System.out.println(e.getMessage());
}
}
}
EJEMPLO CUENTA
class Cuenta
{
double saldo;
public Cuenta()
{
saldo=0;
}
public void ingresar(double c)
{
saldo+=c;
}
// el metodo declara la excepcion que puede
Cuando se lanza una
// caudar una excepcion.
public void extraer(double c) throws Exception
excepcin marcada desde el
{
if (saldo<c)
mtodo (todas lo son salvo
{
// creacion y lanzamiento de la excepcion
RumtimeException y sus
}
throw new Exception("el saldo es menor al retiro");
subclases) esta debe ser
else
{
declarada en la cabecera del
}
saldo-=c;
mtodo para que se pueda
}
public double getSaldo()
propagar al punto de llamada
{
return saldo;
al mismo.
}
}
1 8
1 5 / 0 8 / 2 0 1 0
1 9
1 5 / 0 8 / 2 0 1 0
2 0
1 5 / 0 8 / 2 0 1 0
PRACTICA
2 1
1 5 / 0 8 / 2 0 1 0
BIBLIOGRAFIA
2 2