LINGUAGEM DE PROGRAMAÇÃO I
OBJETIVOS DA AULA
•
•
•
•
•
•
•
•
Exceções
Tratamento de Exceções Estruturadas
Tipos de Exceção
Bloco Try... End Try
A seção Catch
Blocos Try... End Try Aninhados
A seção Finally
Lançamento de Exceções
2
Exceção
• Exceção é um erro no fluxo normal de execução do
código de um programa de uma aplicação.
• O .NET framework oferece uma forma unificada de
identificar e tratar exceções entre todas as linguagens
de programação .NET (BALENA, 2006).
• Há dois tipos de exceções:
 Exceções de Hardware
 Exceções de Software.
3
Exceção
Exceção de Hardware
São causadas por erros do programa a nível de hardware.
Exemplo: Violação de acesso a endereços de memória.
Exceção de Software
são causadas por erros do programa a nível de software.
Exemplo: Atribuir um valor incompatível a uma variável
Divisão por zero
(MACKENZIE e SHARKEY, 2003).
4
Tratamento de Exceções
Estruturadas (SEH)
• O tratamento de exceções estruturadas (Structured Exception
Handling - SEH) é uma estratégia para codificar o programa de
uma aplicação para tratar tanto as exceções de hardware quanto
as exceções de software.
• Dessa forma, o código para tratamento de exceções se torna
unificado e mais consistente por tratar tanto as exceções de
hardware quanto as exceções de software.
• O tratamento de exceções estruturadas é codificado para
proteger seções do código que estiverem propensas a gerarem
exceções como, por exemplo, cálculos, acesso a banco de dados,
operações com arquivos etc.
(MACKENZIE e SHARKEY, 2003).
5
Tipos de Exceções
• Os principais tipos de exceções são:
–
–
–
–
–
–
–
–
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
IndexOutOfRangeException
NotImplementedException
OutOfMemoryException
OverflowException
FileNotFoundException
Os tipos de exceções derivam da classe System.Exception que é definida
no .NET framework.
6
Bloco Try ... End Try
• As palavras-chave Try... End Try delimitam o bloco de códigos
protegidos para tratar as exceções que ocorrerem.
Sintaxe:
Try
...
Catch ex As Exception
...
End Try
Cath:
Marca a seção do bloco que captura e trata as
exceções que podem eventualmente ocorrer.
Em geral, usa-se uma seção Catch para capturar
cada tipo de exceção e uma seção Catch, chamada
genérica, no final para capturar todos os demais
tipos de exceções que não foram capturados pelas
seções Catch anteriores.
7
Bloco Try ... End Try
Sintaxe:
Try
...
Catch ex1 As Exception1
' Código para tratamento da Exception1
...
Catch exN As ExceptionN
' Código para tratamento da ExceptionN
...
' Captura Genérica
Catch ex As Exception
' Código para tratamento das demais exceções
...
End Try
8
Bloco Try ... End Try
Exemplo: Sem Captura e Tratamento de Exceção
Sub Main()
Erro:
Divisão por Zero
Dim i As Decimal = 10
Dim j As Decimal = 0
Dim Resultado As Decimal
Resultado = i / j
Console.ReadKey()
End Sub
9
Bloco Try ... End Try
Exemplo: Com Captura e Tratamento de Exceção
Sub Main()
Dim i As Decimal = 10
Dim j As Decimal = 0
Dim Resultado As Decimal
Permite realizar a captura e o tratamento da
exceção genérica, ou seja, de qualquer tipo de
exceção.
Try
Resultado = i / j
Catch ex As Exception
' Captura Genérica
Console.WriteLine("Houve um erro de exceção de divisão por zero.")
End Try
Console.ReadKey()
End Sub
10
Bloco Try ... End Try
Exemplo: Com Captura e Tratamento de Exceção
Sub Main()
Dim i As Decimal = 10
Permite realizar a captura e o tratamento da
Dim j As Decimal = 0
Divisão por Zero e capturar e tratar uma exceção
Dim Resultado As Decimal
genérica, ou seja, de qualquer tipo de exceção.
Try
Resultado = i + 10
Resultado = i / j
Catch exDivideByZero As DivideByZeroException
‘ Captura DivideByZeroException
Console.WriteLine("Houve um erro de exceção de divisão por zero.")
Catch ex As Exception
' Captura Genérica
Console.WriteLine("Houve um erro de exceção genérica.")
End Try
Console.ReadKey()
End Sub
11
Bloco Try ... End Try - Aninhado
Imports System.IO
Define um bloco Try...End Try externo que
Module Module1
contém um outro bloco Try...End Try interno.
Sub Main()
Dim FileName As String = "TestFile.data"
' Bloco externo
Try
Dim fs As New FileStream(FileName, FileMode.Open, FileAccess.Read)
' Bloco interno
Try
Dim reader As New BinaryReader(fs)
reader.ReadInt32()
Catch ex As Exception
Se ocorrer uma exceção na
Console.WriteLine("Exceção na leitura do arquivo.")
abertura do arquivo, o programa
End Try
exibe a mensagem "Exceção na
Catch ex As Exception
abertura do arquivo." e se após a
Console.WriteLine("Exceção na abertura do arquivo.")
abertura do arquivo sem exceção,
End Try
ocorrer uma exceção na leitura do
Console.ReadKey()
arquivo, o programa exibe a
End Sub
mensagem "Exceção na leitura do
End Module
arquivo.“
12
Seção Finally
• Define o código que deverá ser sempre executado, sem ou com a
ocorrência de uma exceção, antes de terminar o bloco Try...End
Try.
• Em geral, contém o código para liberar recursos alocados no
bloco Try...End Try ou o código comum a ser executado antes de
terminar o bloco Try...End Try.
13
Seção Finally
Sub Main()
Dim i As Decimal = 10
Dim j As Decimal = 0
Dim Resultado As Decimal
Sempre emite um sinal sonoro, Beep(), antes
de terminar o bloco Try...End Try.
Try
i = i + 10
Resultado = i / j
Catch exDivideByZero As DivideByZeroException
' Captura DivideByZeroException
Console.WriteLine("Houve um erro de exceção de divisão por zero.")
Catch ex As Exception
' Captura Genérica
Console.WriteLine("Houve um erro de exceção genérica.")
Finally
Beep()
End Try
Console.ReadKey()
End Sub
14
Lançamento de Exceções
• Em algumas situações você pode deseja lançar uma exceção para
esta seja tratada por uma rotina de tratamento de exceção ou
para gerar uma exceção.
Sintaxe:
Throw [ expressão ]
15
Lançamento de Exceção
Sub Main()
Exemplo: Lançamento de Exceção
Dim i As Decimal = 10
Dim j As Decimal = 0
Dim Resultado As Decimal
Lançar uma exceção genérica com a mensagem
"Divisor j igual a zero" se o valor da variável j for
igual a zero.
Try
i = i + 10
If (j = 0) Then
Throw New System.Exception("Divisor j igual a zero.")
End If
Resultado = i / j
Catch ex As Exception
' Captura Genérica
Console.WriteLine("Houve um erro de exceção de divisão por zero.")
Finally
Beep()
End Try
Console.ReadKey()
End Sub
16
Saiba Mais ....
–
–
–
–
–
–
–
–
–
–
Tratamento de Exceções
• http://msdn.microsoft.com/pt-br/library/c68xfk56.aspx
Manipulação Estruturada de Exceções
• http://msdn.microsoft.com/pt-br/library/8a9f2ew0.aspx
Classe Exception
• http://msdn.microsoft.com/pt-br/library/system.exception.aspx
Como Capturar uma exceção
• http://msdn.microsoft.com/pt-br/library/ys1b32h3.aspx
Declaração Try... Catch... Finally... End Try
• http://msdn.microsoft.com/pt-br/library/fk6t46tz.aspx
Tratamento de Exceção Não Estruturado
• http://msdn.microsoft.com/pt-br/library/sf1hwa21.aspx
Declaração On Error
• http://msdn.microsoft.com/pt-br/library/5hsw66as.aspx
Quando Usar Manipulação de Exceção Estruturada ou Não Estruturada
• http://msdn.microsoft.com/pt-br/library/s74yzzb5.aspx
Como Lançar um exceção
• http://msdn.microsoft.com/pt-br/library/z7w9ff54.aspx
Declaração Throw em linguagem
• http://msdn.microsoft.com/pt-br/library/ty79csek.aspx
17
Próxima Aula
– Programação Orientada a Objetos
18
Download

- Visual.pro.br