Actualizado el 21 de Marzo del 2018 (Publicado el 3 de Febrero del 2018)
766 visualizaciones desde el 3 de Febrero del 2018
335,3 KB
35 paginas
Creado hace 10a (28/09/2013)
EJERCITACIÓN
JAVA
2013
CÁTEDRA DE LENGUAJES ORIENTADOS A OBJETOS
Ing. Mario Bressano & Luciano Diamand
ENVÍO
10
LENGUAJES ORIENTADOS A OBJETOS
2013
{
[BLOQUE DE EJECUCIÓN NORMAL DE SENTENCIAS]
}
MANEJO DE EXCEPCIONES:
EL LENGUAJE Java, como se sabe, es independiente del Sistema Operativo, esto me implica,
perder el control sobre los periféricos, los cuales son fuente, generalmente, de la mayor
cantidad de errores.
Por esto, se dotó a este Lenguaje de una estructura robusta para el manejo de errores. La
misma se basa en la creación de un objeto denominado “EXCEPCIÓN”.
Este objeto contiene el informe sobre el acontecimiento producido y transmite esta información
al método que lo llamó o al usuario mediante un mensaje.
En algunos métodos el error se captura y en otros se expulsa.
La codificación se basa en la siguiente estructura:
try
catch (ClasedeExcepción1 e)
catch (ClasedeExcepción2 e)
catch (ClasedeExcepción3 e)
catch (Excepción e)
finally {
{
[BLOQUE DE EJECUCIÓN EXCEPCIÓN 1]
}
{
[BLOQUE DE EJECUCIÓN EXCEPCIÓN 2]
}
{
[BLOQUE DE EJECUCIÓN EXCEPCIÓN 3]
}
[BLOQUE DE EJECUCIÓN EXCEPCIONES NO CAPTURADAS]
}
{
[BLOQUE DE SENTENCIAS QUE SE EJECUTAN SIEMPRE]
}
Exception
La jerarquía de excepciones en Java
RuntimeException
IOException
Throwable
Error
AWTError
ThreadDeath
OutOfMemoryError
Página 2 de 35
LENGUAJES ORIENTADOS A OBJETOS
2013
Este esquema es una porción de la jerarquía de herencia para la clase Throwable (subclase de
Object).
Las clase Exception tiene dos subclases que están incluidas en java.lang y que contiene la
mayoría de las situaciones de error que se producen. En cambio la clase Error contiene errores
que se producen generalmente en tiempo de ejecución y que no deben ser capturadas por la
aplicación.
Java clasifica a las excepciones en verificadas y no verificadas. Las primeras son aquellas para
las cuales Java implementa un requerimiento para atrapar o declarar.
Si se intenta lanzar una excepción verificada que no esté listada en throw se produce un error
de ejecución.
Las excepciones no verificadas se pueden evitar programando correctamente. (Ej. Caso
ArithmeticException o NumberFormatExcpetion, que es subclase de RuntimeException, no
necesita colocarse en la cláusula throw.
ARTÍCULO PARA AMPLIAR CONTENIDOS
Fuente:
Manejo de Errores Usando Excepciones Java
Autor: Sun
Traductor: Juan Antonio Palos
Corrección y ampliación: Mario Osvaldo Bressano
Web: http://www.programacion.net/java/tutorial
¿Porqué capturar y mostrar errores?
El lenguaje Java fue creado con la intención de ser independiente del Sistema Operativo con el
cual se corre. Debido a esto se lo dotó de un manejo de errores que le confiera robustez (se
dice que “Java es tolerante a las fallas”) ante cualquier falla que pudiera tornar en desastrosa la
ejecución de la aplicación.
Una excepción ocurre cuando no se cumple la norma establecida; su pseudocódigo sería:
Realizar tarea
Si tarea no se realiza correctamente
Procesar errores
El lenguaje maneja errores sincrónicos tales como:
a- Índices fuera de rango,
Página 3 de 35
LENGUAJES ORIENTADOS A OBJETOS
2013
b- Desbordamiento aritmético,
c- División por cero,
d- Asignación fallida de memoria,
e- Interrupción de subprocesos,
f- Parámetros inválidos del método.
Por otro lado, no maneja errores asincrónicos:
a- Operaciones de E/S, de disco, de teclas, etc.
La estructura para la captura de errores es la siguiente:
try
{
Contiene instrucciones que pueden causar excepciones
}
catch (parámetros excepción)
finally
{
Manejador de la instrucción
}
{
Se ejecuta siempre
(Esta cláusula es opcional)
}
Página 4 de 35
LENGUAJES ORIENTADOS A OBJETOS
2013
Clases generadoras de excepciones de uso frecuente
NOMBRE DE LA CLASE
DESCRIPCIÓN
ArithmeticException
Excepción aritmética (p.e. división por cero)
ArrayStoreException
Excepción en una operación uso de un Array
NegativeArraySizeException
Excepción en una operación uso de un Array
NullPointerException
Excepción producida por una referencia a un
objeto nulo
SecurityException
Excepción en el sistema de seguridad
EOFException
Excepción producida al alcanzar el final del
fichero
IOException
Excepción en el proceso de E/S
FileNotFoundException
Excepción por no encontrar un fichero
NumberFormatException
Excepción en la conversión de una cadena de
caracteres a un valor numérico
Página 5 de 35
LENGUAJES ORIENTADOS A OBJETOS
2013
Ejemplo 82: Manejo de errores en una aplicación: Ingresar dos números enteros y dividirlos.
Mostrar el resultado. Manejar los errores esperados:
División por cero
Ingreso de números no enteros
//Manejo de errores- División por cero y error de formato numérico
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ManejoDeErrores extends JFrame
implements ActionListener {
private JTextField campoIngreso1, campoIngreso2, campoSalida;
private int numero1, numero2, resultado;
public static void main( String args[] )
{
ManejoDeErrores application = new ManejoDeErrores();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
// Configuramos GUI
public ManejoDeErrores()
{
Página 6 de 35
LENGUAJES ORIENTADOS A OBJETOS
2013
super( "Manejo de Excepciones" );
// Configuramos el panel contenedor y su layout
Container contenedor = getContentPane();
contenedor.setLayout( new GridLayout( 3, 2 ) );
// Configura etiqueta y campoIngreso1
contenedor.add(
new JLabel( "Ingresar el numerador: ", SwingConstants.RIGHT ) );
campoIngreso1 = new JTextField();
contenedor.add( campoIngreso1 );
// Configura etiqueta y campoIngreso2; registro la escucha
contenedor.add( new JLabel( "Ingresar el denominador y presionar <Enter> ",
SwingConstants.RIGHT ) );
campoIngreso2 = new JTextField();
contenedor.add( campoIngreso2 );
campoIngreso2.addActionListener( this );
// Configura etiqueta y campoSalida
contenedor.add( new JLabel( "Resultado ", SwingConstants.RIGHT ) );
campoSalida = new JTextField();
contenedor.add( campoSalida );
setSize( 425, 100 );
setVisible( true );
Página 7 de 35
LENGUAJES ORIENTADOS A OBJETOS
2013
} // fin del constructor ManejoDeErrores
// Procesar eventos de la GUI
public void actionPerformed( ActionEvent event )
{
campoSalida.setText( "" ); // Borro campoSalida
// Leo dos valores numéricos y calculo el cociente - Aquí comienza el bloque donde puede
haber errores
try {
numero1 = Integer.parseInt( campoIngreso1.getText() );
numero2 = Integer.parseInt( campoIngreso2.getText() );
resultado = cociente( numero1, numero2 );
campoSalida.setText( String.valueOf( resultado ) );
}
// Proceso el error de ingreso producido por mal formato del número
catch ( NumberFormatException numberFormatException ) {
JOptionPane.showMessageDialog( this,
"Usted debe ingresar números enteros", "Formato de número no válido",
JOptionPane.ERROR_MESSAGE );
campoIngreso1.setText( "" ); // Borro campoIngreso1
campoIngreso2.setText( "" ); // Borro campoIngreso2
}
Página 8 de 35
LENGUAJES ORIENTADOS A OBJETOS
2013
// Procesamiento error de división por cero
catch ( ArithmeticException arithmeticException ) {
JOptionPane.showMessageDialog( this,
"División por cero","Excepción Aritmética",
JOptionPane.ERROR_MESSAGE );
campoIngreso1.setText( "" ); // Borro campoIngreso1
campoIngreso2.setText( "" ); // Borro campoIngreso2
campoSalida.setText( "" ); // Borro campoSalida
}
} // fin de método ActionPerformed
// Toma del error en la división por cero
public int cociente( int numerador, int denominador )
throws ArithmeticException
{
return numerador / denominador;
}
} //
Cuando encontramos que un conjunto de sentencias puede lanzar un error, lo abarcamos
dentro de un bloque try. El objeto excepción es lanzado automáticamente y es capturado por
los bloques catch, los cuales se disponen uno a continuación del otro, de manera que el
programa investiga cuál le conviene.
La declaración del método throw permite lanzar excepciones especificadas por el usuario.
Página 9 de 35
LENGUAJES ORIENTADOS A OBJETOS
2013
Requerimientos Java para Capturar o Especificar Excepciones
Java requiere que un método o capture o especifique todas las excepciones chequeadas que
se pueden lanzar dentro de su ámbito. Este requerimiento tiene varios componentes que
necesitan una mayor descripción.
Capturar
Un método puede capturar una excepción proporcionando un manejador para ese tipo de
excepción.
Especificar
Si un método decide no capturar una excepción, debe especificar que puede lanzar esa
excepción. ¿Por qué hicieron este requerimiento los diseñadores de Java
Comentarios de: Ejercitación JAVA (0)
No hay comentarios