Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Tratamento de Excees
Objetivos
Excees. Tratamento de Excees Estruturadas. Tipos de Exceo. Bloco Try...End Try. A seo Catch. Blocos Try...End Try Aninhados. A seo Finally. Lanamento de Excees.
Exceo
Exceo um erro no fluxo normal de execuo do cdigo de um programa de uma aplicao. O.NET framework oferece uma forma unificada de identificar e tratar excees entre todas as linguagens de programao .NET (BALENA, 2006). H dois tipos de excees: excees de hardware e excees de software. As excees de hardware so causadas por erros do programa no que se refere a hardware como, por exemplo, violao de acesso a endereos de memria. Enquanto as excees de software so causadas por erros do programa no que se refere a software como, por exemplo, atribuir um valor incompatvel a uma varivel ou diviso por zero (MACKENZIE e SHARKEY, 2003).
Tipos de Excees
Os tipos de excees derivam da classe System.Exception que definida no .NET framework. Os principais tipos de exceo so: ArgumentException; ArgumentNullException; ArgumentOutOfRangeException; IndexOutOfRangeException; NotImplementedException; OutOfMemoryException; OverflowException; FileNotFoundException.
A seo Catch
A palavra-chave Catch marca a seo do bloco que captura e trata as excees que podem eventualmente ocorrer. Em geral, usa-se uma seo Catch para capturar cada tipo de exceo e uma seo Catch, chamada genrica, no final para capturar todos os demais tipos de excees que no foram capturados pelas sees Catch anteriores. A sintaxe :
A seo Catch
O exemplo a seguir declara a varivel i do tipo Decimal e atribui o valor 10. Declara a varivel j do Decimal e atribui o valor zero. Define a diviso de i por j sem captura e tratamento de exceo, que ao ser executado abortado por gerar uma exceo de diviso por zero (DivideByZeroException).
A seo Catch
A imagem mostra a janela de exceo de diviso por zero sem tratamento, apresentada ao se executar o programa pelo IDE do Visual Basic 2010 Express.
A seo Catch
O exemplo a seguir foi modificado para realizar a captura e o tratamento da exceo genrica, ou seja, de qualquer tipo de exceo.
A seo Catch
A imagem mostra a mensagem exibida pela seo de tratamento de exceo genrica do programa.
A seo Catch
O exemplo a seguir foi modificado para na primeira seo Catch capturar etratar a exceo DivideByZeroException e na segunda seo Catch capturar e tratar uma exceo genrica, ou seja, qualquer tipo de exceo.
A seo Catch
Ao executar o programa, a primeira seo Catch captura a exceo DivideByZeroException e exibe a mensagem mostrada na imagem.
A seo Finally
A seo Finally define o cdigo que dever ser sempre executado, sem ou com a ocorrncia de uma exceo, antes de terminar o bloco Try...End Try. Em geral, contm o cdigo para liberar recursos alocados no bloco Try...End Try ou o cdigo comum a ser executado antes de terminar o bloco Try...End Try. O exemplo a seguir foi modificado para conter a seo Finally, que sempre emite um sinal sonoro (Beep()), antes de terminar o bloco Try...End Try.
A seo Finally
Lanamento de Excees
Em algumas situaes voc pode desejar lanar uma exceo para que esta seja tratada por uma rotina de tratamento de exceo ou para gerar uma exceo. A sintaxe da declarao do lanamento da exceo :
Throw [expresso]
O exemplo a seguir foi modificado para lanar uma exceo genrica com a mensagem "Divisor j igual a zero" se o valor da varivel j for igual a zero. Como a varivel j declarada e inicializada com valor igual a zero, o programa lana a exceo, que capturada pela seo Catch, a qual exibe a mensagem "Ocorreu uma exceo: Divisor j igual a zero.", conforme mostra a imagem.
Lanamento de Excees
Lanamento de Excees
Mensagem exibida com o lanamento da exceo genrica:
Saiba mais
Introduo ao Tratamento de Exceo:
http://msdn.microsoft.com/pt-br/library/c68xfk56.aspx.
Classe Exception:
http://msdn.microsoft.com/pt-br/library/system.exception.aspx
Saiba mais
Declarao On Error:
http://msdn.microsoft.com/pt-br/library/5hsw66as.aspx
Declarao Throw:
http://msdn.microsoft.com/pt-br/library/ty79csek.aspx
Referncias
Universidade Estcio de S Microsoft
http://msdn.microsoft.com/pt-br/library/vstudio/2x7h1hfk(v=vs.100).as