tratamento de exceções - instituto de computação …leomurta/courses/poo/aula9.pdfincapacidade...
TRANSCRIPT
TratamentodeExceções
Auladehoje• Estudaremosformasdetratamentodeexceções
– try...catch...finally
Leonardo Murta Tratamento de Exceções 2
3
Exceções• Conceito
– Exceçõesrepresentamsituaçõesdeerrotratáveis,ocorridasduranteaexecuçãodeumprograma
– Exemplosdeexceçõessãodivisãoporzeroouincapacidadedelerdadosdeumarquivo
• Geradoresdeexceções– InterpretadorJava:quandopercebeumasituaçãodeerropadrão(divisãoporzero,falhadesegurança,…)
– Métodosdoprograma:quandopercebeumasituaçãodeerrointernadoprograma(informaçãoinválida,…)
Leonardo Murta Tratamento de Exceções
HierarquiadeExceção
Leonardo Murta Tratamento de Exceções 4
Ver mais em: https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html
Nãodevemostratar
Devemostratar
TiposdeExceção• DescriçãodealgunsUposdeexceções:
– Error:errogenérico(nãodevemostratar)– ExcepUon:exceçãogenérica(devemostratarsuassubclasses)– RunUmeExcepUon:exceçãodetectadaemtempodeexecução–nãoéindicadapelaIDEduranteacompilação
– IOExcepUon:errosdeentradaesaída– ArithmeUcExcepUon:errodecálculoalgébrico(ex.:divisãoporzero)– NullPointerExcepUon:errodeacessoavariávelnula– SQLExcepUon:errodeacessoabancodedados
• DiversosmétodosdasbibliotecasJavageramexceções– EstasexceçõesdevemsertratadaspelasclassesqueuUlizemasclassesdasbibliotecas
Leonardo Murta Tratamento de Exceções 5
6
TratamentodeExceções• Apalavrareservadathrows,seguidapelaclassedeexceção
gerada,deveserindicadanocabeçalhodeummétodoquegereumaexceção
• Oscomandostry-catch-finallyexecutamumcódigoquepodegerarexceçõesdemaneirasegura,realizandootratamentodasexceções
public int gravaRegistro () throws IOException { … // Código que gera a exceção
}
Leonardo Murta Tratamento de Exceções
TratamentodeExceçõestry {
// Código que pode disparar exceções } catch (Excecao1 e) {
// Código executado caso o código no bloco try // dispare uma exceção tipo Excecao1
} ... catch (ExcecaoN e) {
// Código executado caso o código no bloco try // dispare uma exceção tipo ExcecaoN
} finally { // Código executado sempre, mesmo que tenha ocorrido // uma exceção no bloco try
}
Leonardo Murta Tratamento de Exceções 7
TratamentodeExceções• Aocorrênciadeumaexceçãotransfereofluxodeexecuçãoparaoprimeirocatchquetrateaexceção
• Apósotratamentodaexceçãonocatch,ofluxoétransferidoparaofinallydomesmogrupotry-catch-finally
• Ofinallyéexecutadosempre,tendoounãoexceção,sendoúUlparafechararquivo,transação,etc.
Leonardo Murta Tratamento de Exceções 8
9
PropagaçãodeExceções
openConnection() throws IOException{ openSocket(); sendRequest(); receiveResponse(); }
getContent() { try { openConnection(); readData(); } catch (IOException e) { // Trata erro de E/S } ... }
sendRequest() throws IOException{ write(header); write(body); // Write Error! }
Leonardo Murta Tratamento de Exceções
Exercício• Emquaissituaçõesoprogramadacalculadorapodelançarexceções?– Casoousuárioentrecomvalornãonumérico– Casoousuárioentrecomzeronocasodadivisão
• Testeasduassituações• Reescrevaoprogramafazendousodetratamentodeexceçãoparacadaumadessassituações
Leonardo Murta Tratamento de Exceções 10
TratamentodeExceções