Está en la página 1de 11

21/7/2015

ExcepcionesenJavatecnologasdeinformacin

CreateaccountorSignin

tecnologasdeinformacin

Searchthissite

Menuprincipal

Paginainicial
Quesunsitiowiki?

Search

contact

ExcepcionesenJava

Cmomodificarelsitio
Cmounirseaestesitio?
Miembrosdelsitio
Etiquetasdepginas
Administrarelsitio

ManejoDeExcepcionesenJava

info

Pagetags
basedatos carlosalejandro
ejemplos

Agregarnueva
pgina
Crearnuevapgina
editthispanel

ManejodeErroresUtilizandoExcepciones
Existeunaregladeoroenelmundodelaprogramacin:enlos
programasocurrenerrores:
Qusucederealmentedespusdequehaocurridoelerror?
Cmosemanejaelerror?
Quinlomaneja?
Puederecuperarloelprograma?
EllenguajeJavautilizaexcepcionesparaproporcionar
capacidadesdemanejodeerrores.

QuesunExcepcinyPorQuDeboTener
Cuidado?
Eltrminoexcepcinesunformacortadalafrase"suceso
excepcional"ypuededefinirsedelasiguienteforma:
Definicin:
Unaexcepcinesuneventoqueocurredurantelaejecucindel
programaqueinterrumpeelflujonormaldelassentencias.
Muchasclasesdeerrorespuedenutilizarexcepcionesdesde
seriosproblemasdehardware,comolaaveradeundiscoduro,a
lossimpleserroresdeprogramacin,comotratardeaccederaun
elementodeunarrayfueradesuslmites.Cuandodichoerror
ocurredentrodeunmtodoJava,elmtodocreaunobjeto
'exception'ylomanejafuera,enelsistemadeejecucin.Este
objetocontieneinformacinsobrelaexcepcin,incluyendosutipo
yelestadodelprogramacuandoocurrielerror.
Elsistemadeejecucineselresponsabledebuscaralgncdigo
paramanejarelerror.Enterminologajava,crearunaobjeto
exceptionymanejarloporelsistemadeejecucinsellama
lanzarunaexcepcin.
http://cursoesime.wikidot.com/excepciones

1/11

21/7/2015

ExcepcionesenJavatecnologasdeinformacin

Despusdequeunmtodolanceunaexcepcin,elsistemade
ejecucinentraenaccinparabuscarelmanejadordela
excepcin.Elconjuntode"algunos"mtodosposiblespara
manejarlaexcepcineselconjuntodemtodosdelapilade
llamadasdelmtododondeocurrielerror.
Unmanejadordeexcepcinesconsideradoadecuadosieltipode
laexcepcinlanzadaeselmismoqueeldelaexcepcin
manejadaporelmanejador.Aslaexcepcinsubesobrelapila
dellamadashastaqueencuentraelmanejadorapropiadoyuna
delasllamadasamtodosmanejalaexcepcin,sedicequeel
manejadordeexcepcinelegidocapturalaexcepcin.
Medianteelusodeexcepcionesparamanejarerrores,los
programasJavatienenlassiguientesventajasfrentealas
tcnicasdemanejodeerrorestradicionales.
*Ventaja1:SepararelManejodeErroresdelCdigo"Normal"
*Ventaja2:PropagarlosErroressobrelaPiladeLlamadas
*Ventaja3:AgruparlosTiposdeErroresylaDiferenciacinde
stos

Ventaja1:SepararelManejodeErroresdelCdigo
"Normal"
sitename

.wikidot.com
Edit
History Tags Shareon
Source Explore
Enlaprogramacintradicional,ladeteccin,elinformeyel

manejodeerroresseconvierteenuncdigomuyliado.Por
ejemplo,supongamosquetenemosunafuncinqueleeun
Archivocompletodentrodelamemoria.Enpseudocdigo,la
funcinqueda:
leerArchivo{
abrirelArchivo
determinarsutamao
asignarsuficientememoria
leerelArchivoalamemoria
cerrarelArchivo
}
Aprimeravistaestafuncinparecebastantesencilla,peroignora
todosaquelloerrorespotenciales.
*QusucedesinosepuedeabrirelArchivo?
*QusucedesinosepuededeterminarlalongituddelArchivo?
*Qusucedesinohaysuficientememorialibre?
*Qusucedesilalecturafalla?
*QusucedesinosepuedecerrarelArchivo?
Pararesponderaestascuestionesdentrodelafuncin,
tendramosqueaadirmuchocdigoparaladeteccinyel
manejodeerrores.Elaspectofinaldelafuncinseparecera
esto:
codigodeErrorleerArchivo{
inicializarcodigodeError=0
abrirelArchivo
if(ArchivoAbierto){
determinarlalongituddelArchivo
if(obtenerLongitudDelArchivo){

http://cursoesime.wikidot.com/excepciones

2/11

21/7/2015

ExcepcionesenJavatecnologasdeinformacin

asignarsuficientememoria
if(obtenerSuficienteMemoria){
leerelArchivoamemoria
if(falloDeLectura){
codigodeError=1
}
}else{
codigodeError=2
}
}else{
codigodeError=3
}
cerrarelArchivo
if(ArchivoNoCerrado&&codigodeError==0){
codigodeError=4
}else{
codigodeError=codigodeErrorand4
}
}else{
codigodeError=5
}
returncodigodeError
}
Encomparacinconlaslneasdecdigooriginal,conobtenidose
puedeobservarunincrementosumamentegrande,msdel
300%,ademsnospodemosllegaraconfundirconmucha
facilidad.
Javaproporcionaunasolucinelegantealproblemadel
tratamientodeerrores:lasexcepciones.Lasexcepcionesle
permitenescribirelflujoprincipaldesucdigoytratarloscasos
excepcionalesenotrolugar.SilafuncinleerFciheroutilizara
excepcionesenlugardelastcnicasdemanejodeerrores
tradicionalessepodrapareceraesto.
leerArchivo{
try{
abrirelArchivo
determinarsutamao
asignarsuficientememoria
leerelArchivoalamemoria
cerrarelArchivo
}catch(falloAbrirArchivo){
hacerAlgo
}catch(falloDeterminacionTamao){
hacerAlgo
}catch(falloAsignaciondeMemoria){
hacerAlgo
}catch(falloLectura){
hacerAlgo
}catch(falloCerrarArchivo){
hacerAlgo
}
}
Observaquelasexcepcionesnoevitanelesfuerzodehacerel
trabajodedetectar,informarymanejarerrores.Loque
proporcionanlasexcepcioneseslaposibilidaddesepararlos
detallesoscurosdequhacercuandoocurrealgofueradela
http://cursoesime.wikidot.com/excepciones

3/11

21/7/2015

ExcepcionesenJavatecnologasdeinformacin

normal.

IntroduccinalaprogramacinenJava
LasexcepcionesenJavaestndestinadas,aligualqueenelresto
deloslenguajesquelassoportan,paraladeteccinycorreccin
deerrores.Sihayunerror,laaplicacinnodeberamorirsey
generaruncore(ouncrashencasodelDOS).Sedeberalanzar
(throw)unaexcepcinquenosotrosdeberamoscapturar(catch)
yresolverlasituacindeerror.Javasigueelmismomodelode
excepcionesqueseutilizaenC++.Utilizadasenformaadecuada,
lasexcepcionesaumentanengranmedidalarobustezdelas
aplicaciones.

ManejoDeExcepciones
Vamosamostrarcomoseutilizanlasexcepciones,reconvirtiendo
nuestroappletdesaludoapartirdelaversiniterativade
HolaIte.java:
importjava.awt.*
importjava.applet.Applet

publicclassHolaIteextendsApplet{
privateinti=0
privateStringSaludos[]={
"HolaMundo!",
"HOLAMundo!",
"HOLAMUNDO!!"
}

publicvoidpaint(Graphicsg){
g.drawString(Saludos[i],25,25)
i++
}
}
Normalmente,unprogramaterminaconunmensajedeerror
cuandoselanzaunaexcepcin.Sinembargo,Javatiene
mecanismosparaexcepcionesquepermitenverquexcepcinse
haproducidoeintentarrecuperarsedeella.
Vamosareescribirelmtodopaint()denuestraversiniterativa
delsaludo:
publicvoidpaint(Graphicsg){
try{
g.drawString(Saludos[i],25,25)
}catch(ArrayIndexOutOfBoundsExceptione){
g.drawString("Saludosdesbordado",25,25)
}catch(Exceptione){
//Cualquierotraexcepcin
System.out.println(e.toString())
}finally{
System.out.println("Estoseimprimesiempre!
}
i++
http://cursoesime.wikidot.com/excepciones

4/11

21/7/2015

ExcepcionesenJavatecnologasdeinformacin

Lapalabraclavefinallydefineunbloquedecdigoquesequiere
queseaejecutadosiempre,deacuerdoasisecapturla
excepcinono.Enelejemploanterior,lasalidaenlaconsola,
coni=4sera:
Saludosdesbordado
Estoseimprimesiempre!
GenerarExcepcionesenJava
Cuandoseproduceunerrorsedeberagenerar,olanzar,una
excepcin.ParaqueunmtodoenJava,puedalanzar
excepciones,hayqueindicarloexpresamente.
voidMetodoAsesino()throwsNullPointerException,CaidaException
Sepuedendefinirexcepcionespropias,nohayporqulimitarsea
laspredefinidasbastarconextenderlaclaseExceptiony
proporcionarlafuncionalidadextraquerequieraeltratamientode
esaexcepcin.
Tambinpuedenproducirseexcepcionesnodeformaexplcita
comoenelcasoanterior,sinodeformaimplcitacuandose
realizaalgunaaccinilegalonovlida.
Lasexcepciones,pues,puedenoriginarsededosmodos:el
programahacealgoilegal(casonormal),oelprograma
explcitamentegeneraunaexcepcinejecutandolasentencia
throw(casomenosnormal).Lasentenciathrowtienelasiguiente
forma:
throwObtejoExcepction

ElobjetoObjetoExceptionesunobjetodeunaclaseque

Elsiguientecdigodeejemplooriginaunaexcepcinde

classmelon{
publicstaticvoidmain(String[]a){
inti=0,j=0,k

k=i/j//Originaunerrordedivisionbyzero
}
}

SicompilamosyejecutamosestaaplicacinJava,obtendremosla
siguientesalidaporpantalla:
>javacmelon.java
>javamelon
java.lang.ArithmeticException:/byzero
atmelon.main(melon.java:5)
Lasexcepcionespredefinidas,comoArithmeticException,se
conocencomoexcepcionesruntime.Actualmente,comotodaslas
excepcionessoneventosruntime,seramejorllamarlas
http://cursoesime.wikidot.com/excepciones

5/11

21/7/2015

ExcepcionesenJavatecnologasdeinformacin

excepcionesirrecuperables.Estocontrastaconlasexcepciones
quegeneramosexplcitamente,quesuelensermuchomenos
severasyenlamayoradeloscasospodemosrecuperarnosde
ellas.Porejemplo,siunficheronopuedeabrirse,preguntamosal
usuarioquenosindiqueotroficheroosiunaestructuradedatos
seencuentracompleta,podremossobreescribiralgnelemento
queyanosenecesite.

ExcepcionesPredefinidas
Lasexcepcionespredefinidasysujerarquadeclaseseslaquese
muestraenlafigura:
excepcionespredefinidas
Losnombresdelasexcepcionesindicanlacondicindeerrorque
representan.Lassiguientessonlasexcepcionespredefinidasms
frecuentesquesepuedenencontrar:
ArithmeticException
Lasexcepcionesaritmticassontpicamenteelresultadodeuna
divisinpor0:
inti=12/0
NullPointerException
Seproducecuandoseintentaaccederaunavariableomtodo
antesdeserdefinido:
classHolaextendsApplet{
Imageimg
paint(Graphicsg){
g.drawImage(img,25,25,this)
}
}
IncompatibleClassChangeException
Elintentodecambiarunaclaseafectadaporreferenciasenotros
objetos,especficamentecuandoesosobjetostodavanohansido
recompilados.
ClassCastException
Elintentodeconvertirunobjetoaotraclasequenoesvlida.
y=(Prueba)x//donde
xnoesdetipoPrueba
NegativeArraySizeException
Puedeocurrirsihayunerroraritmticoalintentarcambiarel
tamaodeunarray.
OutOfMemoryException
Nodeberaproducirsenunca!Elintentodecrearunobjetoconel
operadornewhafalladoporfaltadememoria.Ysiempretendra
quehabermemoriasuficienteporqueelgarbagecollectorse
encargadeproporcionarlaalirliberandoobjetosquenoseusany
devolviendomemoriaalsistema.
http://cursoesime.wikidot.com/excepciones

6/11

21/7/2015

ExcepcionesenJavatecnologasdeinformacin

NoClassDefFoundException
Sereferenciunaclasequeelsistemaesincapazdeencontrar.
ArrayIndexOutOfBoundsException
Eslaexcepcinquemsfrecuentementeseproduce.Segeneraal
intentaraccederaunelementodeunarraymsalldelos
lmitesdefinidosinicialmenteparaesearray.
UnsatisfiedLinkException
Sehizoelintentodeaccederaunmtodonativoquenoexiste.
Aqunoexisteunmtodoa.kk
classA{
nativevoidkk()
}
ysellamaaa.kk(),cuandodeberallamaraA.kk().
InternalException
Esteerrorsereservaparaeventosquenodeberanocurrir.Por
definicin,elusuarionuncadeberaveresteerroryesta
excepcinnodeberalanzarse.

CrearExcepcionesPropias
Tambinpodemoslanzarnuestraspropiasexcepciones,
extendiendolaclaseSystem.exception.Porejemplo,
consideremosunprogramacliente/servidor.Elcdigoclientese
intentaconectaralservidor,ydurante5segundosseesperaa
quecontesteelservidor.Sielservidornoresponde,elservidor
lanzaralaexcepcindetimeout:
classServerTimeOutExceptionextendsException{}

publicvoidconectame(StringnombreServidor)throwsException
intexito
intpuerto=80

exito=open(nombreServidor,puerto)
if(exito==1)
throwServerTimeOutException
}

Sisequierencapturarlaspropiasexcepciones,sedeberutilizar
lasentenciatry:
publicvoidencuentraServidor(){
...
try{
conectame(servidorDefecto)
catch(ServerTimeOutExceptione){
g.drawString(
"TimeoutdelServidor,intentandoalternativa
5,5)
conectame(servidorAlterno)
http://cursoesime.wikidot.com/excepciones

7/11

21/7/2015

ExcepcionesenJavatecnologasdeinformacin

}
...
}

Cualquiermtodoquelanceunaexcepcintambindebe
capturarla,odeclararlacomopartedelainterfacedelmtodo.
Cabepreguntarseentonces,elporqudelanzarunaexcepcinsi
hayquecapturarlaenelmismomtodo.Larespuestaesquelas
excepcionesnosimplificaneltrabajodelcontroldeerrores.
Tienenlaventajadequesepuedetenermuylocalizadoelcontrol
deerroresynotenemosquecontrolarmillonesdevaloresde
retorno,peronovanmsall.

PropagacindeExcepciones
Laclusulacatchcompruebalosargumentosenelmismoorden
enqueaparezcanenelprograma.Sihayalgunoquecoincida,se
ejecutaelbloqueysigueelflujodecontrolporelbloquefinally
(silohay)yconcluyeelcontroldelaexcepcin.
Siningunadelasclusulascatchcoincideconlaexcepcinquese
haproducido,entoncesseejecutarelcdigodelaclusula
finally(encasodequelahaya).Loqueocurreenestecaso,es
exactamentelomismoquesilasentenciaquelanzalaexcepcin
noseencontraseencerradaenelbloquetry.
Elflujodecontrolabandonaestemtodoyretorna
prematuramentealmtodoquelollam.Silallamadaestaba
dentrodelmbitodeunasentenciatry,entoncessevuelvea
intentarelcontroldelaexcepcin,yascontinuamente.
Veamosloquesucedecuandounaexcepcinnoestratadaenla
rutinaendondeseproduce.ElsistemaJavabuscaunbloque
try..catchmsalldelallamada,perodentrodelmtodoquelo
trajoaqu.Silaexcepcinsepropagadetodasformashastalo
altodelapiladellamadassinencontraruncontroladorespecfico
paralaexcepcin,entonceslaejecucinsedetendrdandoun
mensaje.Esdecir,podemossuponerqueJavanosest
proporcionandounbloquecatchpordefecto,queimprimeun
mensajedeerrorysale.
Nohayningunasobrecargaenelsistemaporincorporar
sentenciastryalcdigo.Lasobrecargaseproducecuandose
generalaexcepcin.
Hemosdichoyaqueunmtododebecapturarlasexcepciones
quegenera,oentodocaso,declararlascomopartedesu
llamada,indicandoatodoelmundoqueescapazdegenerar
excepciones.Estodebeserasparaquecualquieraqueescriba
unallamadaaesemtodoestavisadodequelepuedellegar
unaexcepcin,enlugardelvalorderetornonormal.Estopermite
alprogramadorquellamaaesemtodo,elegirentrecontrolarla
excepcinopropagarlahaciaarribaenlapiladellamadas.La
siguientelneadecdigomuestralaformageneralenqueun
mtododeclaraexcepcionesquesepuedenpropagarfueradel:
tipo_de_retorno(parametros)throwse1,e2,e3{}
Losnombrese1,e2,debensernombresdeexcepciones,es
http://cursoesime.wikidot.com/excepciones

8/11

21/7/2015

ExcepcionesenJavatecnologasdeinformacin

decir,cualquiertipoqueseaasignablealtipopredefinido
Throwable.Observarque,comoenlallamadaalmtodose
especificaeltipoderetorno,seestespecificandoeltipode
excepcinquepuedegenerar(enlugardeunobjetoexception).
Heaquunejemplo,tomadodelsistemaJavadeentrada/salida:
bytereadByte()throwsIOException
shortreadShort()throwsIOException
charreadChar()throwsIOException

voidwriteByte(intv)throwsIOException
voidwriteShort(intv)throwsIOException
voidwriteChar(intv)throwsIOException

Lomsinteresanteaquesquelarutinaqueleeunchar,puede
devolveruncharnoelenteroqueserequiereenC.Cnecesita
quesedevuelvaunint,parapoderpasarcualquiervaloraun
char,yademsunvalorextra(1)paraindicarqueseha
alcanzadoelfinaldelfichero.AlgunasdelasrutinasJavalanzan
unaexcepcincuandosealcanzaelfindelfichero.
Enelsiguientediagramasemuestragrficamentecmose
propagalaexcepcinquesegeneraenelcdigo,atravsdela
piladellamadasdurantelaejecucindelcdigo:
<a
href="http://s207.photobucket.com/albums/bb254/rotten_sPy/?
action=view&current=excepa.gif"target="_blank"><img
src="http://i207.photobucket.com/albums/bb254/rotten_sPy/excepa.gif"
border="0"alt="ejemplodeexcepcion"></a>
Cuandosecreaunanuevaexcepcin,derivandodeunaclase
Exceptionyaexistente,sepuedecambiarelmensajequelleva
asociado.Lacadenadetextopuedeserrecuperadaatravsdeun
mtodo.Normalmente,eltextodelmensajeproporcionar
informacinpararesolverelproblemaosugerirunaaccin
alternativa.Porejemplo:
classSinGasolinaextendsException{
SinGasolina(Strings){//constructor
super(s)
}
.
//Cuandoseuse,apareceralgocomoesto
try{
if(j<1)
thrownewSinGasolina("Usandodepositodereserva
}catch(SinGasolinae){
System.out.println(o.getMessage())
}

Esto,entiempodeejecucinoriginaralasiguientesalidapor
pantalla:
Usandodepositodereserva
http://cursoesime.wikidot.com/excepciones

9/11

21/7/2015

ExcepcionesenJavatecnologasdeinformacin

OtromtodoqueesheredadodelasuperclaseThrowablees
printStackTrace().Invocandoaestemtodosobreunaexcepcin
sevolcarapantallatodaslasllamadashastaelmomentoen
dondesegenerlaexcepcin(nodondesemanejelaexcepcin).
Porejemplo:

//Capturandounaexcepcinenunmtodo
classtestcap{
staticintslice0[]={0,1,2,3,4}

publicstaticvoidmain(Stringa[]){
try{
uno()
}catch(Exceptione){
System.out.println("Capturadelaexcepcionenmain
e.printStackTrace()
}
}

staticvoiduno(){
try{
slice0[1]=4
}catch(NullPointerExceptione){
System.out.println("Capturaunaexcepciondiferente
}
}
}

Cuandoseejecuteesecdigo,enpantallaobservaremosla
siguientesalida:
Capturadelaexcepcionenmain()
java.lang.ArrayIndexOutOfBoundsException:1
attestcap.uno(test5p.java:19)
attestcap.main(test5p.java:9)
Contodoelmanejodeexcepcionespodemosconcluirque
proporcionaunmtodomsseguroparaelcontroldeerrores,
ademsderepresentarunaexcelenteherramientaparaorganizar
ensitiosconcretostodoelmanejodeloserroresy,adems,que
podemosproporcionarmensajesdeerrormsdecentesalusuario
indicandoquesloquehafalladoyporqu,einclusopodemos,
aveces,recuperarnosdeloserrores.
Ladegradacinqueseproduceenlaejecucindeprogramascon
manejodeexcepcionesestampliamentecompensadaporlas
ventajasquerepresentaencuantoaseguridaddefuncionamiento
deesosmismosprogramas.

http://cursoesime.wikidot.com/excepciones

10/11

21/7/2015

ExcepcionesenJavatecnologasdeinformacin

pagerevision:8,lastedited:7Jul2008,11:32(2570daysago)

Edit Rate(0) Tags Discuss History Files Print


Sitetools +Options

PoweredbyWikidot.com

Help|TermsofService|Privacy|Reportabug|Flagasobjectionable

Unlessotherwisestated,thecontentofthispageislicensedunderCreativeCommonsAttributionShareAlike
3.0License

Otherinterestingsites

LaFondationSCP
BrancheFrancophone.

http://cursoesime.wikidot.com/excepciones

ChessVariantsWiki

Himetop

VariableThinkingWiki

TheHistoryofMedicine
TopographicalDatabase

Lifeisawordproblem

11/11

También podría gustarte