SlideShare una empresa de Scribd logo
EJEMPLO
En los apartados anteriores hemos definido y utilizado una excepción con sus constructores básicos,
pero sin propiedades ni métodos adicionales. En ocasiones con el esquema seguido es suficiente,
sin embargo, a menudo es adecuado dotar de un estado (propiedades) a la clase que define la
excepción. Veamos este concepto con un ejemplo sencillo: deseamos programar la introducción por
teclado de matrículas de vehículos en un país donde las matrículas se componen de 8 caracteres,
siendo obligatoriamente el primero de ellos una letra. Si alguna matrícula introducida por el usuario
no sigue el formato esperado se recogerá la interrupción oportuna y se escribirá un aviso en la
consola.

En el código siguiente se presenta la clase ExMatricula que hereda la funcionalidad de Exception
(línea 1). Los constructores situados en las líneas 7 y 10 permiten iniciar el estado de la clase a
través de los constructores de su superclase.
En la línea 3 se define la propiedad MalFormada, que contiene información sobre la razón por la que
el formato de la matrícula es incorrecto: tamaño inadecuado (línea 4) o inexistencia de la letra inicial
(línea 5).
El constructor de la línea 14 permite crear una excepción ExMatricula indicando la naturaleza del
pro blema que obligará a levantar (trhow) esta excepción (ExMatricula.MAL_TAMANIO o
ExMatricula.MAL_LETRA).
En la línea 18 se suministra un método que permitirá, a los programa que reciben la excepción, saber
la razón que ha provocado la misma.

1 public class ExMatricula extends Exception {
2
3 private int MalFormada = 0;
4 static final int MAL_TAMANIO = -1;
5 static final int MAL_LETRA = -2;
6
7 ExMatricula()
8 {}
9
10 ExMatricula(String s) {
11 super(s);
12 }
13
14 ExMatricula(int MalFormada) {
15 this.MalFormada = MalFormada;
16 }
17
18 public int DimeProblema() {
19 return MalFormada;
20 }
21
22 }

Una vez creada la excepción ExMatricula podemos escribir el código que valida las matrículas. La
siguiente clase (ExMatriculaValidar) realiza este cometido: el método Validar situado en la línea 7
comprueba el formato del parámetro suministrado y si es necesario tendrá capacidad de levantar (
throws) la excepción ExMatricula.
Si la longitud de la matrícula es distinta de 8 caracteres (línea 8) se crea y levanta la excepción
ExMatricula con estado inicial ExMatricula.MAL_TAMANIO (línea 9). Si el carácter inicial no es una
letra (línea 11) se crea y levanta la excepción ExMatricula con estado inicial
ExMatricula.MAL_LETRA (línea 12).
El método privado (sólo es visible en esta clase) UnaLetra aísla el primer carácter y comprueba que
es una letra empleando el método matches y la expresión regular “[A-Za-z]”. La utilización de
expresiones regulares se incluye a partir de la versión 1.4 del JDK.
1 public class ExMatriculaValidar {
2
3 private boolean UnaLetra(String Matricula) {
4
return Matricula.substring(0,1).matches("[A-Za-z]");
5 }
6
7 public void Validar(String Matricula) throws ExMatricula {
8
if (Matricula.length()!=8)
9
throw new ExMatricula(ExMatricula.MAL_TAMANIO);
10
else
11
if (!UnaLetra(Matricula))
12
throw new ExMatricula(ExMatricula.MAL_LETRA);
13
else
14
{} // matricula bien formada
15 }
16
17 }

Con el método de validación de matrículas implementado, capaz de levantar la excepción
ExMatricula, ya podemos escribir una aplicación que recoja las matrículas que introducen los
usuarios. La recuperación de los errores de formato se escribirá en el bloque catch correspondiente:

1 public class ExMatriculaPrincipal {
2
3 public static void main (String[] args) {
4
ExMatriculaValidar LaMatricula = new
ExMatriculaValidar();
5
6
do
7
try {
8
System.out.println("Introduce la matricula: ");
9
String Matricula = Teclado.Lee_String();
10
LaMatricula.Validar(Matricula);
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 }
27 }

}
catch(ExMatricula e) {
switch (e.DimeProblema()) {
case ExMatricula.MAL_TAMANIO:
System.out.println("Tamanio incorrecto");
break;
case ExMatricula.MAL_LETRA:
System.out.println("Letra inicial no
incluida");
break;
default:
System.out.println("Matricula correcta");
break;
}
}
while(true);

En el código anterior existe un bucle infinito (líneas 6 y 25) que permite la validación de matrículas
(líneas 8, 9 y 10). Habitualmente estas tres líneas se ejecutan repetitivamente; esporádicamente el
usuario introducirá una matrícula con el formato erróneo y el método Validar levantará la excepción
ExMatricula, que será recogida y tratada en el bloque catch (línea 12).
En la línea 13 sabemos que se ha producido una excepción ExMatricula, pero no conocemos su
causa exacta (tamaño incorrecto o primer carácter distinto de letra). El método DimeProblema que
incluimos en la clase ExMatricula nos indica el estado de la excepción. Si el estado de la excepción
es MAL_TAMANIO le indicamos esta situación al usuario que introdujo la matrícula con un tamaño
incorrecto (líneas 14 y 15). En las líneas 17 y 18 hacemos lo propio con MAL_LETRA.
La ventana siguiente muestra un ejemplo de ejecución del programa:

Los objetos utilizados en el ejemplo se presentan en la siguiente tabla
La estructura de clases se representa en el siguiente diagrama que relaciona los objetos:

Más contenido relacionado

La actualidad más candente

Taller de tecnologia. Grado 11-5 Liceo Departamental
Taller de tecnologia. Grado 11-5 Liceo DepartamentalTaller de tecnologia. Grado 11-5 Liceo Departamental
Taller de tecnologia. Grado 11-5 Liceo Departamental
Dayana Mendes H
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de controlElena Perz
 
Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catch
jbersosa
 
Selección múltiple switch
Selección múltiple switchSelección múltiple switch
Selección múltiple switch
Gabriel Barboza
 
Llamadas a subalgoritmos
Llamadas a subalgoritmosLlamadas a subalgoritmos
Llamadas a subalgoritmos
Abrirllave
 
Instrucciones de control repetitivas
Instrucciones de control repetitivasInstrucciones de control repetitivas
Instrucciones de control repetitivas
Abrirllave
 
Estructuras de control selectiva
Estructuras de control selectivaEstructuras de control selectiva
Estructuras de control selectiva
IEO Santo Tomás
 
Programa 16
Programa 16Programa 16
Programa 16
Erick Ramirez
 
Taller macro
Taller macroTaller macro
Taller macro
Camila Acevedo
 
Presentacion wilfredo nadales(29946762)-programas estructurados
Presentacion wilfredo nadales(29946762)-programas estructuradosPresentacion wilfredo nadales(29946762)-programas estructurados
Presentacion wilfredo nadales(29946762)-programas estructurados
WilfredoNadales
 
Tarea sesion 14
Tarea sesion 14Tarea sesion 14
Tarea sesion 14
Jhon Nizama
 
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNTEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNAnyeni Garay
 
Metodos en java
Metodos en javaMetodos en java
Metodos en java
Ricardo Garcia
 
Tallermacro 200310160938
Tallermacro 200310160938Tallermacro 200310160938
Tallermacro 200310160938
Camila A
 
STATEMENT
STATEMENTSTATEMENT
Taller macro
Taller macroTaller macro
Taller macro
Valentina Valencia
 
Selectivas
SelectivasSelectivas
Selectivas
ronaldocasassosa
 
Estructuras de control selectivas
Estructuras de control selectivasEstructuras de control selectivas
Estructuras de control selectivasmarigelcontreras
 

La actualidad más candente (18)

Taller de tecnologia. Grado 11-5 Liceo Departamental
Taller de tecnologia. Grado 11-5 Liceo DepartamentalTaller de tecnologia. Grado 11-5 Liceo Departamental
Taller de tecnologia. Grado 11-5 Liceo Departamental
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catch
 
Selección múltiple switch
Selección múltiple switchSelección múltiple switch
Selección múltiple switch
 
Llamadas a subalgoritmos
Llamadas a subalgoritmosLlamadas a subalgoritmos
Llamadas a subalgoritmos
 
Instrucciones de control repetitivas
Instrucciones de control repetitivasInstrucciones de control repetitivas
Instrucciones de control repetitivas
 
Estructuras de control selectiva
Estructuras de control selectivaEstructuras de control selectiva
Estructuras de control selectiva
 
Programa 16
Programa 16Programa 16
Programa 16
 
Taller macro
Taller macroTaller macro
Taller macro
 
Presentacion wilfredo nadales(29946762)-programas estructurados
Presentacion wilfredo nadales(29946762)-programas estructuradosPresentacion wilfredo nadales(29946762)-programas estructurados
Presentacion wilfredo nadales(29946762)-programas estructurados
 
Tarea sesion 14
Tarea sesion 14Tarea sesion 14
Tarea sesion 14
 
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNTEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
 
Metodos en java
Metodos en javaMetodos en java
Metodos en java
 
Tallermacro 200310160938
Tallermacro 200310160938Tallermacro 200310160938
Tallermacro 200310160938
 
STATEMENT
STATEMENTSTATEMENT
STATEMENT
 
Taller macro
Taller macroTaller macro
Taller macro
 
Selectivas
SelectivasSelectivas
Selectivas
 
Estructuras de control selectivas
Estructuras de control selectivasEstructuras de control selectivas
Estructuras de control selectivas
 

Destacado

Folder Instituto Empreendedores Universitários
Folder Instituto Empreendedores UniversitáriosFolder Instituto Empreendedores Universitários
Folder Instituto Empreendedores Universitários
Instituto Empreendedores Universitários®
 
El hombre base fundamental del materialismo y la dialéctica
El hombre base fundamental del materialismo y la dialécticaEl hombre base fundamental del materialismo y la dialéctica
El hombre base fundamental del materialismo y la dialécticaAndrez San
 
Clasificacion de Patrimonio
Clasificacion de PatrimonioClasificacion de Patrimonio
Clasificacion de Patrimonio
katherinbrito
 
Cupcakes
CupcakesCupcakes
Cupcakes
mlope657
 
Se barba fosse respeito, bode não era
Se barba fosse respeito, bode não eraSe barba fosse respeito, bode não era
Se barba fosse respeito, bode não eraRosangela Souza
 
Logistics strategies
Logistics strategiesLogistics strategies
Logistics strategies
Didier Hernando Rodriguez Oros
 
EHR recommendations_UNCG_Deligianis_Taneja_Kutas
EHR recommendations_UNCG_Deligianis_Taneja_KutasEHR recommendations_UNCG_Deligianis_Taneja_Kutas
EHR recommendations_UNCG_Deligianis_Taneja_KutasDavid Kutas
 
Cuadro estadistico de la gestion 2012 y 2013 felcv
Cuadro estadistico de la gestion 2012  y 2013 felcvCuadro estadistico de la gestion 2012  y 2013 felcv
Cuadro estadistico de la gestion 2012 y 2013 felcvErbol Digital
 
Jhohan ruiz
Jhohan ruizJhohan ruiz
Jhohan ruiz
jhohamn
 
Howard Buckley_cv_3feb
Howard Buckley_cv_3febHoward Buckley_cv_3feb
Howard Buckley_cv_3febHoward Buckley
 

Destacado (13)

Folder Instituto Empreendedores Universitários
Folder Instituto Empreendedores UniversitáriosFolder Instituto Empreendedores Universitários
Folder Instituto Empreendedores Universitários
 
PMOStepsDetails
PMOStepsDetailsPMOStepsDetails
PMOStepsDetails
 
El hombre base fundamental del materialismo y la dialéctica
El hombre base fundamental del materialismo y la dialécticaEl hombre base fundamental del materialismo y la dialéctica
El hombre base fundamental del materialismo y la dialéctica
 
Clasificacion de Patrimonio
Clasificacion de PatrimonioClasificacion de Patrimonio
Clasificacion de Patrimonio
 
Cupcakes
CupcakesCupcakes
Cupcakes
 
Eligibility Letter
Eligibility LetterEligibility Letter
Eligibility Letter
 
Coursera designingcities 2015
Coursera designingcities 2015Coursera designingcities 2015
Coursera designingcities 2015
 
Se barba fosse respeito, bode não era
Se barba fosse respeito, bode não eraSe barba fosse respeito, bode não era
Se barba fosse respeito, bode não era
 
Logistics strategies
Logistics strategiesLogistics strategies
Logistics strategies
 
EHR recommendations_UNCG_Deligianis_Taneja_Kutas
EHR recommendations_UNCG_Deligianis_Taneja_KutasEHR recommendations_UNCG_Deligianis_Taneja_Kutas
EHR recommendations_UNCG_Deligianis_Taneja_Kutas
 
Cuadro estadistico de la gestion 2012 y 2013 felcv
Cuadro estadistico de la gestion 2012  y 2013 felcvCuadro estadistico de la gestion 2012  y 2013 felcv
Cuadro estadistico de la gestion 2012 y 2013 felcv
 
Jhohan ruiz
Jhohan ruizJhohan ruiz
Jhohan ruiz
 
Howard Buckley_cv_3feb
Howard Buckley_cv_3febHoward Buckley_cv_3feb
Howard Buckley_cv_3feb
 

Similar a Ejemplo

Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en Java
John Ortiz
 
Informe compilador divisor
Informe compilador divisorInforme compilador divisor
Informe compilador divisor
Soraya Lara
 
Switch case (informe_18)
Switch case (informe_18)Switch case (informe_18)
Switch case (informe_18)
Carlos Guzmán
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - TrovitJordi Gerona
 
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANSTutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
William Diaz S
 
Por pagar
Por pagarPor pagar
Compilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y CupCompilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y Cup
Soraya Lara
 
Compilador (divisor de cantidades )
Compilador (divisor de cantidades )Compilador (divisor de cantidades )
Compilador (divisor de cantidades )
Soraya Lara
 
Aplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionalesAplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionalesmarigelcontreras
 
fp_p4.pdf
fp_p4.pdffp_p4.pdf
fp_p4.pdf
GarciaJag1
 
Lab excepciones
Lab excepcionesLab excepciones
Lab excepciones
Andres Herrera Rodriguez
 
Estructuras De Control
Estructuras De ControlEstructuras De Control
Estructuras De Control
UPS
 
Switch case (informe_13)
Switch case (informe_13)Switch case (informe_13)
Switch case (informe_13)
Carlos Guzmán
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepcionesJuan Mancilla
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepciones
jbersosa
 
Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standar
jbersosa
 

Similar a Ejemplo (20)

Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en Java
 
Informe compilador divisor
Informe compilador divisorInforme compilador divisor
Informe compilador divisor
 
Switch case (informe_18)
Switch case (informe_18)Switch case (informe_18)
Switch case (informe_18)
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
 
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANSTutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
 
Por pagar
Por pagarPor pagar
Por pagar
 
Compilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y CupCompilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y Cup
 
Java básico
Java  básicoJava  básico
Java básico
 
Ejercicios3
Ejercicios3Ejercicios3
Ejercicios3
 
Compilador (divisor de cantidades )
Compilador (divisor de cantidades )Compilador (divisor de cantidades )
Compilador (divisor de cantidades )
 
Tipos de excepciones
Tipos de excepcionesTipos de excepciones
Tipos de excepciones
 
Aplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionalesAplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionales
 
fp_p4.pdf
fp_p4.pdffp_p4.pdf
fp_p4.pdf
 
Lab excepciones
Lab excepcionesLab excepciones
Lab excepciones
 
Estructuras De Control
Estructuras De ControlEstructuras De Control
Estructuras De Control
 
Switch case (informe_13)
Switch case (informe_13)Switch case (informe_13)
Switch case (informe_13)
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepciones
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepciones
 
Try catch
Try catchTry catch
Try catch
 
Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standar
 

Más de Manuel Alejandro Hernandez Sanchez

Más de Manuel Alejandro Hernandez Sanchez (20)

Serialización personalizada
Serialización personalizadaSerialización personalizada
Serialización personalizada
 
Ejemplo
EjemploEjemplo
Ejemplo
 
Entrada
EntradaEntrada
Entrada
 
Introducción
IntroducciónIntroducción
Introducción
 
Herencia
HerenciaHerencia
Herencia
 
Tipo estático y tipo dinámico
Tipo estático y tipo dinámicoTipo estático y tipo dinámico
Tipo estático y tipo dinámico
 
Introducción
IntroducciónIntroducción
Introducción
 
Uso de polimorfismo
Uso de polimorfismoUso de polimorfismo
Uso de polimorfismo
 
Enlace dinámico
Enlace dinámicoEnlace dinámico
Enlace dinámico
 
Clase base
Clase baseClase base
Clase base
 
Por qué java no soporta la sobre carga de operadores
Por qué java no soporta la sobre carga de operadoresPor qué java no soporta la sobre carga de operadores
Por qué java no soporta la sobre carga de operadores
 
Sobrecarga de constructores
Sobrecarga de constructoresSobrecarga de constructores
Sobrecarga de constructores
 
Recolección de basura
Recolección de basuraRecolección de basura
Recolección de basura
 
Retorno de valores
Retorno de valoresRetorno de valores
Retorno de valores
 
Metodos de mensajes
Metodos de mensajesMetodos de mensajes
Metodos de mensajes
 
La destrucción del objeto
La destrucción del objetoLa destrucción del objeto
La destrucción del objeto
 
Acceso al objeto
Acceso al objetoAcceso al objeto
Acceso al objeto
 
Agregar un metodo que toma parametros
Agregar un metodo que toma parametrosAgregar un metodo que toma parametros
Agregar un metodo que toma parametros
 
Asignación de variables de referencia de objeto
Asignación de variables de referencia de objetoAsignación de variables de referencia de objeto
Asignación de variables de referencia de objeto
 
Una clase simple.
Una clase simple. Una clase simple.
Una clase simple.
 

Ejemplo

  • 1. EJEMPLO En los apartados anteriores hemos definido y utilizado una excepción con sus constructores básicos, pero sin propiedades ni métodos adicionales. En ocasiones con el esquema seguido es suficiente, sin embargo, a menudo es adecuado dotar de un estado (propiedades) a la clase que define la excepción. Veamos este concepto con un ejemplo sencillo: deseamos programar la introducción por teclado de matrículas de vehículos en un país donde las matrículas se componen de 8 caracteres, siendo obligatoriamente el primero de ellos una letra. Si alguna matrícula introducida por el usuario no sigue el formato esperado se recogerá la interrupción oportuna y se escribirá un aviso en la consola. En el código siguiente se presenta la clase ExMatricula que hereda la funcionalidad de Exception (línea 1). Los constructores situados en las líneas 7 y 10 permiten iniciar el estado de la clase a través de los constructores de su superclase. En la línea 3 se define la propiedad MalFormada, que contiene información sobre la razón por la que el formato de la matrícula es incorrecto: tamaño inadecuado (línea 4) o inexistencia de la letra inicial (línea 5). El constructor de la línea 14 permite crear una excepción ExMatricula indicando la naturaleza del pro blema que obligará a levantar (trhow) esta excepción (ExMatricula.MAL_TAMANIO o ExMatricula.MAL_LETRA). En la línea 18 se suministra un método que permitirá, a los programa que reciben la excepción, saber la razón que ha provocado la misma. 1 public class ExMatricula extends Exception { 2 3 private int MalFormada = 0; 4 static final int MAL_TAMANIO = -1; 5 static final int MAL_LETRA = -2; 6 7 ExMatricula() 8 {} 9 10 ExMatricula(String s) { 11 super(s); 12 } 13 14 ExMatricula(int MalFormada) { 15 this.MalFormada = MalFormada; 16 } 17 18 public int DimeProblema() { 19 return MalFormada; 20 }
  • 2. 21 22 } Una vez creada la excepción ExMatricula podemos escribir el código que valida las matrículas. La siguiente clase (ExMatriculaValidar) realiza este cometido: el método Validar situado en la línea 7 comprueba el formato del parámetro suministrado y si es necesario tendrá capacidad de levantar ( throws) la excepción ExMatricula. Si la longitud de la matrícula es distinta de 8 caracteres (línea 8) se crea y levanta la excepción ExMatricula con estado inicial ExMatricula.MAL_TAMANIO (línea 9). Si el carácter inicial no es una letra (línea 11) se crea y levanta la excepción ExMatricula con estado inicial ExMatricula.MAL_LETRA (línea 12). El método privado (sólo es visible en esta clase) UnaLetra aísla el primer carácter y comprueba que es una letra empleando el método matches y la expresión regular “[A-Za-z]”. La utilización de expresiones regulares se incluye a partir de la versión 1.4 del JDK. 1 public class ExMatriculaValidar { 2 3 private boolean UnaLetra(String Matricula) { 4 return Matricula.substring(0,1).matches("[A-Za-z]"); 5 } 6 7 public void Validar(String Matricula) throws ExMatricula { 8 if (Matricula.length()!=8) 9 throw new ExMatricula(ExMatricula.MAL_TAMANIO); 10 else 11 if (!UnaLetra(Matricula)) 12 throw new ExMatricula(ExMatricula.MAL_LETRA); 13 else 14 {} // matricula bien formada 15 } 16 17 } Con el método de validación de matrículas implementado, capaz de levantar la excepción ExMatricula, ya podemos escribir una aplicación que recoja las matrículas que introducen los usuarios. La recuperación de los errores de formato se escribirá en el bloque catch correspondiente: 1 public class ExMatriculaPrincipal { 2 3 public static void main (String[] args) { 4 ExMatriculaValidar LaMatricula = new ExMatriculaValidar(); 5 6 do 7 try { 8 System.out.println("Introduce la matricula: "); 9 String Matricula = Teclado.Lee_String(); 10 LaMatricula.Validar(Matricula);
  • 3. 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 } 27 } } catch(ExMatricula e) { switch (e.DimeProblema()) { case ExMatricula.MAL_TAMANIO: System.out.println("Tamanio incorrecto"); break; case ExMatricula.MAL_LETRA: System.out.println("Letra inicial no incluida"); break; default: System.out.println("Matricula correcta"); break; } } while(true); En el código anterior existe un bucle infinito (líneas 6 y 25) que permite la validación de matrículas (líneas 8, 9 y 10). Habitualmente estas tres líneas se ejecutan repetitivamente; esporádicamente el usuario introducirá una matrícula con el formato erróneo y el método Validar levantará la excepción ExMatricula, que será recogida y tratada en el bloque catch (línea 12). En la línea 13 sabemos que se ha producido una excepción ExMatricula, pero no conocemos su causa exacta (tamaño incorrecto o primer carácter distinto de letra). El método DimeProblema que incluimos en la clase ExMatricula nos indica el estado de la excepción. Si el estado de la excepción es MAL_TAMANIO le indicamos esta situación al usuario que introdujo la matrícula con un tamaño incorrecto (líneas 14 y 15). En las líneas 17 y 18 hacemos lo propio con MAL_LETRA. La ventana siguiente muestra un ejemplo de ejecución del programa: Los objetos utilizados en el ejemplo se presentan en la siguiente tabla
  • 4. La estructura de clases se representa en el siguiente diagrama que relaciona los objetos: