4 desa apli manejo archivos-capitulo 1 -02 creacion excepciones

16
Revisando Excepciones Existentes Entre algunas de las excepciones ya definidas en el sistema más conocidas están: NullPointerException Se produce cuando se intenta acceder a una variable o método antes de ser definido: public class Ejemplo { String hola; public static void main(String[] args) { System.out.println(hola); } } IncompatibleClassChangeException El intento de cambiar una clase afectada por referencias en otros objetos, específicamente cuando esos objetos todavía no han sido recompilados. ClassCastException El intento de convertir un objeto a otra clase que no es válida. y = (ClaseA)x; // donde x no puede ser de tipo ClaseA NegativeArraySizeException Puede ocurrir si hay un error aritmético al cambiar el tamaño de un arreglo. OutOfMemoryException ¡No debería producirse nunca!, pero sucede con el intento de crear un objeto con el operador new y este ha fallado por falta de memoria. Y siempre tendría que haber memoria suficiente porque el garbage collector se encarga de proporcionarla al ir liberando objetos que no se usan y devolviendo memoria al sistema. IV.Desarrollo de aplicaciones con manejo de archivos de texto y de excepciones en JAVA

Upload: erika-lozano-ramirez

Post on 02-Nov-2014

121 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

Revisando Excepciones Existentes

Entre algunas de las excepciones ya definidas en el sistema más conocidas están:

NullPointerException

Se produce cuando se intenta acceder a una variable o método antes de ser definido:

public class Ejemplo { String hola;

public static void main(String[] args) { System.out.println(hola); }}

IncompatibleClassChangeException

El intento de cambiar una clase afectada por referencias en otros objetos, específicamente cuando esos objetos todavía no han sido recompilados.

ClassCastException

El intento de convertir un objeto a otra clase que no es válida.

y = (ClaseA)x; // donde x no puede ser de tipo ClaseA

NegativeArraySizeException

Puede ocurrir si hay un error aritmético al cambiar el tamaño de un arreglo.

OutOfMemoryException

¡No debería producirse nunca!, pero sucede con el intento de crear un objeto con el operador new y este ha fallado por falta de memoria. Y siempre tendría que haber memoria suficiente porque el garbage collector se encarga de proporcionarla al ir liberando objetos que no se usan y devolviendo memoria al sistema.

NoClassDefFoundException

Se hizo referencia a una clase que el sistema es incapaz de encontrar.

ArrayIndexOutOfBoundsException

IV.Desarrollo de aplicaciones con manejo de archivos de texto y de excepciones en JAVA

Page 2: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

Es la excepción que más frecuentemente se produce. Se genera al intentar acceder a un elemento de un arreglo más allá de los límites definidos inicialmente para ese arreglo. Ejemplo:

int arreglo[] = new int[5];

arreglo[5] = 100; // no puede ser ya que solo existen del cero al cuatro

Creando Excepciones

Un programador puede crear excepciones propias en Java, las cuales pueden ser utilizadas en diferentes aplicaciones.

Las Excepciones se pueden crear, es decir puede haber excepciones definidas para que sean utilizadas en algunas aplicaciones en las que podemos incurrir en ellas, esto puede ser definido en alguna compañía en la que trabajemos, o por un mismo programador que desarrolle software en el que se desee reutilizar código.

Una manera fácil de manejar excepciones nuevas sería la de siempre hacerlas subclases de Throwable, como se muestra a continuación:

public class MiExcepcion extends Throwable {

public MiExcepcion() { System.out.println("Se arrojo excepción mía"); }}

Con esto, las excepciones de MiExcepcion pueden ser lanzadas, declaradas y atrapadas como en el siguiente ejemplo:

import java.io.*;

public class AplicacionExcepcion5 {

public static void metodo(String s) throws MiExcepcion {if ("feliz".equals(s)) {

System.out.println("Son iguales."); } else {

throw new MiExcepcion(); //se lanza}

}

public static void main(String[] args) throws IOException, MiExcepcion {

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

String s;System.out.println("Da la palabra");s = in.readLine();metodo(s);

}

Page 3: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

}

En este ejemplo observamos que si la palabra dada por el usuario coincide con feliz entonces se desplegará el mensaje son iguales, y la aplicación terminará normalmente, por otro lado si la palabra no concuerda con feliz, entonces se lanzará la excepción MiExcepcion y el mensaje se arrojo excepción mía será desplegado, veamos la ejecución en ambos casos:

Throw

La instrucción throw puede ser utilizada para lanzar una excepción ya sea propia o del sistema, es decir nosotros podríamos decir throw ArithmeticException, así como pusimos throw MiExcepcion, claro que no tendría razon que lanzáramos una excepción, lo importante es atraparla, es decir tener el try/catch correspondiente para cada una de las excepciones que podamos llegar a tener en nuestra aplicación o applet.

Aplicaciones con el uso de Excepciones

Revisemos algunas aplicaciones pasadas que pudieran tener errores, cuyos errores pudieran ser ahora corregidos con el uso del try/catch, veamos el applet que utilizaba un arreglo:

import java.awt.*;import java.applet.*;import java.awt.event.*;

// <applet width="400" height="200" code="AppletArreglos1"></applet>

public class AppletArreglos1 extends Applet implements ActionListener{ Label l1, l2;

Button b1, b2,b3,b4; TextField t1;

Page 4: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

TextArea ta1; int arreglo[]; int conta;

public AppletArreglos1() {l1 = new Label("Dato a Añadir");l2 = new Label("Texto para ver Arreglo");t1 = new TextField();ta1 = new TextArea(10,12);b1 = new Button("Añade");b2 = new Button("Muestra Vector");b3 = new Button("Limpia Vector");b4 = new Button("Limpia Campos");add(l1);add(t1);add(l2);add(ta1);add(b1);add(b2);add(b3);add(b4);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);arreglo = new int[100];conta=0;

} public void actionPerformed(ActionEvent ae) { if (ae.getSource() == b1) { if (conta > arreglo.length) { ta1.setText("No se puede añadir otro elemento"); } else { arreglo[conta++] = Integer.parseInt(t1.getText()); t1.setText(""); } } if (ae.getSource() == b2) { ta1.setText(""); for (int i=0; i < conta; i++) { ta1.append("" + arreglo[i] + "\n"); } } if (ae.getSource() == b3) { conta = 0; arreglo = new int[100]; } if (ae.getSource() == b4) {

t1.setText("");ta1.setText("");

} }

}

Page 5: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

Si revisamos el applet podemos ver el problema de no validar si el dato que se teclea es un número, lo cual nos puede dar un error de ejecución, como lo vemos en el ejemplo:

Page 6: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

La mejor forma de revisarlo es usar el try/catch para que esto no funcione, como se indica:

import java.awt.*;import java.applet.*;import java.awt.event.*;

public class AppletArreglos1 extends Applet implements ActionListener{ Label l1, l2;

Button b1, b2,b3,b4; TextField t1; TextArea ta1; int arreglo[]; int conta;

public AppletArreglos1() {l1 = new Label("Dato a Añadir");l2 = new Label("Texto para ver Arreglo");t1 = new TextField();ta1 = new TextArea(10,12);b1 = new Button("Añade");b2 = new Button("Muestra Vector");b3 = new Button("Limpia Vector");b4 = new Button("Limpia Campos");add(l1);add(t1);add(l2);add(ta1);add(b1);

Page 7: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

add(b2);add(b3);add(b4);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);arreglo = new int[100];conta=0;

} public void actionPerformed(ActionEvent ae) { if (ae.getSource() == b1) { if (conta > arreglo.length) { ta1.setText("No se puede añadir otro elemento"); } else { try { int numero = Integer.parseInt(t1.getText()); arreglo[conta++] = numero; } catch(NumberFormatException nfe) { ta1.setText("invalido " + nfe.toString()); } t1.setText(""); } } if (ae.getSource() == b2) { ta1.setText(""); for (int i=0; i < conta; i++) { ta1.append("" + arreglo[i] + "\n"); } } if (ae.getSource() == b3) { conta = 0; arreglo = new int[100]; } if (ae.getSource() == b4) {

t1.setText("");ta1.setText("");

} }

}

Page 8: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

Observamos en el try, que únicamente después de la instrucción que puede dar la excepción, es que se añade el valor al arreglo, de tal manera que hacemos que sea solo un valor adecuado.

com .sun .corba .se .impl .corba .ExceptionListImplcom .sun .corba .se .impl .io .OptionalDataExceptioncom .sun .corba .se .impl .io .TypeMismatchExceptioncom .sun .corba .se .impl .logging .ActivationSystemExceptioncom .sun .corba .se .impl .logging .InterceptorsSystemExceptioncom .sun .corba .se .impl .logging .IORSystemExceptioncom .sun .corba .se .impl .logging .NamingSystemExceptioncom .sun .corba .se .impl .logging .OMGSystemExceptioncom .sun .corba .se .impl .logging .ORBUtilSystemExceptioncom .sun .corba .se .impl .logging .POASystemExceptioncom .sun .corba .se .impl .logging .UtilSystemException

Page 9: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

com .sun .corba .se .impl .orbutil .threadpool .TimeoutExceptioncom .sun .corba .se .impl .presentation .rmi .ExceptionHandlercom .sun .corba .se .impl .presentation .rmi .ExceptionHandlerImplcom .sun .corba .se .impl .presentation .rmi .IDLTypeExceptioncom .sun .corba .se .impl .protocol .AddressingDispositionExceptioncom .sun .corba .se .impl .protocol .RequestCanceledExceptioncom .sun .corba .se .spi .copyobject .ReflectiveCopyExceptioncom .sun .corba .se .spi .legacy .connection .GetEndPointInfoAgainExceptioncom .sun .corba .se .spi .orbutil .threadpool .NoSuchThreadPoolExceptioncom .sun .corba .se .spi .orbutil .threadpool .NoSuchWorkQueueExceptioncom .sun .corba .se .spi .protocol .ForwardExceptioncom .sun .image .codec .jpeg .ImageFormatExceptioncom .sun .image .codec .jpeg .TruncatedFileExceptioncom .sun .jmx .snmp .BerExceptioncom .sun .jmx .snmp .SnmpBadSecurityLevelExceptioncom .sun .jmx .snmp .SnmpSecurityExceptioncom .sun .jmx .snmp .SnmpStatusExceptioncom .sun .jmx .snmp .SnmpTooBigExceptioncom .sun .jmx .snmp .SnmpUnknownAccContrModelExceptioncom .sun .jmx .snmp .SnmpUnknownModelExceptioncom .sun .jmx .snmp .SnmpUnknownModelLcdExceptioncom .sun .jmx .snmp .SnmpUnknownMsgProcModelExceptioncom .sun .jmx .snmp .SnmpUnknownSecModelExceptioncom .sun .jmx .snmp .SnmpUnknownSubSystemExceptioncom .sun .jmx .snmp .daemon .CommunicationExceptioncom .sun .jmx .snmp .IPAcl .ParseExceptioncom .sun .mirror .type .MirroredTypeExceptioncom .sun .mirror .type .MirroredTypesExceptioncom .sun .org .apache .bcel .internal .ExceptionConstantscom .sun .org .apache .bcel .internal .classfile .ClassFormatExceptioncom .sun .org .apache .bcel .internal .classfile .CodeExceptioncom .sun .org .apache .bcel .internal .classfile .ExceptionTablecom .sun .org .apache .bcel .internal .generic .ClassGenExceptioncom .sun .org .apache .bcel .internal .generic .CodeExceptionGencom .sun .org .apache .bcel .internal .generic .ExceptionThrowercom .sun .org .apache .bcel .internal .generic .TargetLostExceptioncom .sun .org .apache .regexp .internal .RESyntaxExceptioncom .sun .org .apache .xalan .internal .xsltc .TransletExceptioncom .sun .org .apache .xalan .internal .xsltc .cmdline .getopt .GetOptsExceptioncom .sun .org .apache .xalan .internal .xsltc .cmdline .getopt .IllegalArgumentExceptioncom .sun .org .apache .xalan .internal .xsltc .cmdline .getopt .MissingOptArgExceptioncom .sun .org .apache .xalan .internal .xsltc .compiler .CompilerExceptioncom .sun .org .apache .xalan .internal .xsltc .compiler .IllegalCharExceptioncom .sun .org .apache .xerces .internal .dom .RangeExceptionImplcom .sun .org .apache .xerces .internal .impl .dv .DatatypeExceptioncom .sun .org .apache .xerces .internal .impl .dv .DVFactoryExceptioncom .sun .org .apache .xerces .internal .impl .dv .InvalidDatatypeFacetException

Page 10: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

com .sun .org .apache .xerces .internal .impl .dv .InvalidDatatypeValueExceptioncom .sun .org .apache .xerces .internal .impl .dv .xs .SchemaDateTimeExceptioncom .sun .org .apache .xerces .internal .impl .io .MalformedByteSequenceExceptioncom .sun .org .apache .xerces .internal .impl .xpath .XPathExceptioncom .sun .org .apache .xerces .internal .impl .xpath .regex .ParseExceptioncom .sun .org .apache .xerces .internal .impl .xs .XMLSchemaExceptioncom .sun .org .apache .xerces .internal .jaxp .validation .WrappedSAXExceptioncom .sun .org .apache .xerces .internal .xni .XNIExceptioncom .sun .org .apache .xerces .internal .xni .parser .XMLConfigurationExceptioncom .sun .org .apache .xerces .internal .xni .parser .XMLParseExceptioncom .sun .org .apache .xerces .internal .xs .XSExceptioncom .sun .org .apache .xml .internal .dtm .DTMConfigurationExceptioncom .sun .org .apache .xml .internal .dtm .DTMDOMExceptioncom .sun .org .apache .xml .internal .dtm .DTMExceptioncom .sun .org .apache .xml .internal .resolver .CatalogExceptioncom .sun .org .apache .xml .internal .security .exceptionscom .sun .org .apache .xml .internal .security .c14n .CanonicalizationExceptioncom .sun .org .apache .xml .internal .security .c14n .InvalidCanonicalizerExceptioncom .sun .org .apache .xml .internal .security .encryption .XMLEncryptionExceptioncom .sun .org .apache .xml .internal .security .exceptions .AlgorithmAlreadyRegisteredExceptioncom .sun .org .apache .xml .internal .security .exceptions .Base64DecodingExceptioncom .sun .org .apache .xml .internal .security .exceptions .XMLSecurityExceptioncom .sun .org .apache .xml .internal .security .exceptions .XMLSecurityRuntimeExceptioncom .sun .org .apache .xml .internal .security .keys .ContentHandlerAlreadyRegisteredExceptio…com .sun .org .apache .xml .internal .security .keys .keyresolver .InvalidKeyResolverExceptioncom .sun .org .apache .xml .internal .security .keys .keyresolver .KeyResolverExceptioncom .sun .org .apache .xml .internal .security .keys .storage .StorageResolverExceptioncom .sun .org .apache .xml .internal .security .signature .InvalidDigestValueExceptioncom .sun .org .apache .xml .internal .security .signature .InvalidSignatureValueExceptioncom .sun .org .apache .xml .internal .security .signature .MissingResourceFailureExceptioncom .sun .org .apache .xml .internal .security .signature .ReferenceNotInitializedExceptioncom .sun .org .apache .xml .internal .security .signature .XMLSignatureExceptioncom .sun .org .apache .xml .internal .security .transforms .InvalidTransformExceptioncom .sun .org .apache .xml .internal .security .transforms .TransformationExceptioncom .sun .org .apache .xml .internal .security .utils .resolver .ResourceResolverExceptioncom .sun .org .apache .xml .internal .serializer .utils .WrappedRuntimeExceptioncom .sun .org .apache .xml .internal .utils .StopParseExceptioncom .sun .org .apache .xml .internal .utils .WrappedRuntimeExceptioncom .sun .org .apache .xml .internal .utils .WrongParserExceptioncom .sun .org .apache .xpath .internal .XPathExceptioncom .sun .org .apache .xpath .internal .XPathProcessorExceptioncom .sun .org .apache .xpath .internal .domapi .XPathStylesheetDOM3Exceptioncom .sun .org .apache .xpath .internal .functions .WrongNumberArgsExceptionjava .awt .AWTException

Page 11: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

java .awt .FontFormatExceptionjava .awt .HeadlessExceptionjava .awt .IllegalComponentStateExceptionjava .awt .color .CMMExceptionjava .awt .color .ProfileDataExceptionjava .awt .datatransfer .MimeTypeParseExceptionjava .awt .datatransfer .UnsupportedFlavorExceptionjava .awt .dnd .InvalidDnDOperationExceptionjava .awt .geom .IllegalPathStateExceptionjava .awt .geom .NoninvertibleTransformExceptionjava .awt .image .ImagingOpExceptionjava .awt .image .RasterFormatExceptionjava .awt .print .PrinterAbortExceptionjava .awt .print .PrinterExceptionjava .awt .print .PrinterIOExceptionjava .beans .ExceptionListenerjava .beans .IntrospectionExceptionjava .beans .PropertyVetoExceptionjava .io .CharConversionExceptionjava .io .EOFExceptionjava .io .FileNotFoundExceptionjava .io .InterruptedIOExceptionjava .io .InvalidClassExceptionjava .io .InvalidObjectExceptionjava .io .IOExceptionjava .io .NotActiveExceptionjava .io .NotSerializableExceptionjava .io .ObjectStreamExceptionjava .io .OptionalDataExceptionjava .io .StreamCorruptedExceptionjava .io .SyncFailedExceptionjava .io .UnsupportedEncodingExceptionjava .io .UTFDataFormatExceptionjava .io .WriteAbortedExceptionjava .lang .ArithmeticExceptionjava .lang .ArrayIndexOutOfBoundsExceptionjava .lang .ArrayStoreExceptionjava .lang .ClassCastExceptionjava .lang .ClassNotFoundExceptionjava .lang .CloneNotSupportedExceptionjava .lang .EnumConstantNotPresentExceptionjava .lang .Exceptionjava .lang .ExceptionInInitializerErrorjava .lang .IllegalAccessExceptionjava .lang .IllegalArgumentExceptionjava .lang .IllegalMonitorStateExceptionjava .lang .IllegalStateException

Page 12: 4 Desa Apli Manejo Archivos-Capitulo 1 -02 Creacion Excepciones

java .lang .IllegalThreadStateExceptionjava .lang .IndexOutOfBoundsExceptionjava .lang .InstantiationExceptionjava .lang .InterruptedExceptionjava .lang .NegativeArraySizeExceptionjava .lang .NoSuchFieldExceptionjava .lang .NoSuchMethodExceptionjava .lang .NullPointerExceptionjava .lang .NumberFormatExceptionjava .lang .RuntimeExceptionjava .lang .SecurityExceptionjava .lang .StringIndexOutOfBoundsExceptionjava .lang .TypeNotPresentExceptionjava .lang .UnsupportedOperationExceptionjava .lang .annotation .AnnotationTypeMismatchExceptionjava .lang .annotation .IncompleteAnnotationExceptionjava .lang .instrument .IllegalClassFormatExceptionjava .lang .instrument .UnmodifiableClassExceptionjava .lang .reflect .InvocationTargetExceptionjava .lang .reflect .MalformedParameterizedTypeExceptionjava .lang .reflect .UndeclaredThrowableExceptionjava .net .BindExceptionjava .net .ConnectExceptionjava .net .HttpRetryExceptionjava .net .MalformedURLExceptionjava .net .NoRouteToHostExceptionjava .net .PortUnreachableExceptionjava .net .ProtocolExceptionjava .net .SocketExceptionjava .net .SocketTimeoutExceptionjava .net .UnknownHostExceptionjava .net .UnknownServiceExceptionjava .net .URISyntaxExceptionjava .nio .BufferOverflowExceptionjava .nio .BufferUnderf