Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Excepciones en Java - Tecnologías de Información
Excepciones en Java - Tecnologías de Información
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¤t=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)
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