Académique Documents
Professionnel Documents
Culture Documents
Agenda
Introduo Capturar exceo usando try, catch e Finally Propagar excees no capturadas Lanando excees Hierarquia de excees Correspondncia de exceo Declaraes de excees
Introduo
Introduo
Excees Exceptions
So situaes excepcionais e geralmente indesejveis que podem ocorrer durante a execuo de um programa. Excees podem ser tratadas incluindo-se cdigo adequado no programa no so erros fatais. Mais precisamente, uma exceo um evento que ocorre durante a execuo de um programa que o interrompe o fluxo normal das instrues. Uma exceo altera o fluxo normal da execuo de um programa.
4
Introduo
ndice de uma lista (Array) fora do limite permitido. Problemas em operaes aritmticas overflows e diviso por zero. Argumentos invlidos na chamada de um mtodo. Falta de memria. Acesso negado a um arquivo. Acesso a rede. Outros...
Introduo
Basicamente porque excees no tratadas provocam a finalizao do programa. Vantagem 1: Separa o cdigo de manuseio do erro das outras linhas de cdigo. Vantagem 2: Reporta os erros entre os mtodos chamados. Vantagem 3: Agrupa os erros por tipos e diferencia entre erros possveis.
6
Vantagens:
Introduo
Programao tradicional cdigo confuso. Programao Java cdigo mais organizado, elegante e compacto, portanto mais legvel.
Introduo
Vantagem 1:
Introduo
Capacidade de reportar o erro ocorrido entre os mtodos executados anteriormente at o momento do erro.
Exemplo: ReportarErros.java
Introduo
Separar erros por categorias ou grupos Exceptions devem ser instncias da classe Throwable ou subclasse de Throwable.
10
11
Excees
Quando uma exceo ocorre, diz-se que uma exceo ser lanada.
O cdigo que responsvel por fazer algo com a exceo chamado de manipulador de excees, em outras palavras, ele captura a exceo lanada.
12
try
usada para indicar um bloco de cdigo no qual possam ocorrer excees Este bloco de cdigo chamado de regio protegida, ou seja, cdigo de risco. Clusula associada a uma exceo especfica ou mais abrangente, que permite manipular a exceo a partir de um bloco de cdigo.
catch
13
14
15
Os manipuladores de exceo (catch) so locais inapropriados para a limpeza depois da execuo do cdigo try, pois cada manipulador precisar de usa prpria cpia do cdigo de limpeza. Ao alocar um socket de rede ou abrir um arquivo em algum local da regio protegida, cada manipulador de exceo teria que fechar o arquivo ou liberar o socket. Estes cdigos podem ser inseridos em um bloco finally.
Exemplo:
16
Fechar o cdigo de execuo tanto para try quanto para catch. Sempre ser executado, se uma exceo for lanada ou no. Mesmo havendo uma instruo de return no bloco try, o bloco finally ser executado logo aps essa instruo. Ento, o local certo para fechar arquivos, liberar sockets de rede e executar qualquer outra limpeza que o cdigo necessitar.
17
Sintaxe geral
try {
bloco } catch (instncia de uma subclasse de Exception) { bloco try deve ser seguido de um ou mais catch } finally { e/ou exatamente um finally bloco } O bloco finally executado sempre, ocorrendo
ou no uma exceo.
18
A clusula finally no obrigatria. possvel escrever um cdigo try sem a clusula catch, mas nesse caso, obrigatrio a implementao do finally:
try { //instrues } finally { //faz a limpeza }
19
20
21
22
Quando um mtodo no fornece uma clusula catch para uma exceo especfica, ento este mtodo deve repassar a exceo (a responsabilidade) O que acontece a uma exceo transferida?
23
main( )
main inicia
2) a pilha de chamadas enquanto metodo3( ) est sendo executado. A execuo volta para metodo2( ) Ordem na qual os mtodos 1 metodo2( ) metodo2( ) vai finalizar finalizam.
2 3 metodo1( ) main( ) metodo1( ) vai finalizar main vai finalizar e o JVM terminar a sua execuo
24
Exemplo:
25
Exemplo: lanando e capturando a exceo propagada. Se a string for vazia, uma exceo dever ser lanada e capturada na chamada do mtodo inverter
26
Lanando excees
27
Lanando excees
public void metodo1() throws IOException { . . . throw new IOException(causa...); } // ou public void metodo1() throws IOException, OutraExcecao { . . . }
Continua
Prof. Marcos Andr Pisching, M.Sc. 28
Lanando excees
29
Lanando excees
throw e throws
Se um mtodo no captura (catch) a exception, deve-se ao menos declar-la. A declarao faz-se atravs da palavra-chave throws. Declarar significa repassar esta exception para o mtodo chamador.
Continua
Prof. Marcos Andr Pisching, M.Sc. 30
Lanando excees
throw e throws
throw e throws
31
Lanando excees
Exemplo
Exceo tratada
Prof. Marcos Andr Pisching, M.Sc. 32
Hierarquia de excees
33
Hierarquia de excees
Quando uma exceo lanada, o objeto de um subtipo Exception especfico lanado e inserido no manipulador de excees como um argumento para a clusula catch. Por isso, esse formato da clusula catch:
try { //instrues } catch (ArrayIndexOutOfBoundsException ex) { ex.printStackTrace(); }
Neste exemplo, ex a instncia de uma classe chamada de ArrayIndexOutOfBoundsException. Assim, como qualquer outro objeto, podemos chamar seus mtodos.
34
Hierarquia de excees
Esta classe derivada de Throwable Esta deriva de Object. Error: as classes que derivam desta representam situaes incomuns que so causadas por erros no programa. Exemplo: falta de memria Embora considerados como condies excepcionais, Error tecnicamente no so excees porque no derivam da classe Exception. Faz pouco sentido trat-los, pois a JVM j deve ter feito de tudo para contornar a situao.
35
Hierarquia de excees
Hierarquia de classes
As excees RuntimeException, Error e todos os seus subtipos so excees no verificadas, isto , no precisam ser capturadas ou manipuladas.
36
Hierarquia de excees
Tipos que podem ser lanados atravs de throws e que podem ser capturados:
Hierarquia de excees
Mais de um tipo de exceo pode ser capturada em uma nica clusula catch vale a herana Exemplo:
Se algum cdigo do bloco try lanar ArrayIndexOutOfBoudsException ou StringIndexOutOfBoundsException, a exceo ser capturada e manipulada. Continua
38
Hierarquia de excees
Este tipo de declarao pode acontecer, mas deve ser usado moderadamente. Especificando o tipo da superclasse, pode-se estar descartando informaes valiosas sobre a exceo. Por exemplo:
Tratar um Exception muito abrangente. Fica difcil indentificar a real exceo.
39
Hierarquia de excees
Correspondncia de Excees
Superclasse com vrios subtipos A JVM tenta encontrar uma clusula catch para o tipo da exceo que foi lanada. Procura de cima para baixo (do primeiro catch ao ltimo) Caso no seja encontrado, um manipulador para um supertipo da exceo ser procurado. Se ainda assim no encontrar uma clusula catch apropriada, ento a exceo ser propagada para baixo na pilha de chamadas.
40
Hierarquia de excees
Exemplo:
Continua
Prof. Marcos Andr Pisching, M.Sc. 41
Hierarquia de excees
Exemplo:
Neste caso a exceo lanada foi FileNotFoundException. Mas poderia ser tambm um EOFException ou outra. Sendo estas subclasses de IOException, teremos a garantia que a exceo ser tratada caso no for FileNotFoundException. Como qualquer outra exceo que estende IOException pode ser lanada isso nos obriga a declara-la. Veja exemplo do Prximo slide. Continua
Prof. Marcos Andr Pisching, M.Sc. 42
Hierarquia de excees
Exemplo:
Outras excees de IOException, que no FileNotFoudException podem ocorrer. Isso nos obriga trata-las
Continua
Prof. Marcos Andr Pisching, M.Sc. 43
Hierarquia de excees
44
Declarao de Excees
45
Declarao de exceo
46
Declarao de exceo
Todo mtodo deve tratar todas as excees verificadas fornecendo uma clusula catch, ou ento listar cada exceo verificada que no tiver recebido tratamento como uma exceo lanada.
Continua
47
Declarao de exceo
Exemplo:
Como tem um throw, o mtodo dever declarar um throws avisando que uma exceo pode ser Lanada. Isto s no necessrio para excees que estendem RuntimeException.
Prof. Marcos Andr Pisching, M.Sc.
Continua
48
Declarao de exceo
Continua
49
Declarao de exceo
Continua
50
Declarao de exceo
51
Declarao de exceo
Verificada:
Ter que ser capturada em algum local do cdigo. Se um mtodo que lance uma exceo verificada for chamado, mas no capturar a exceo em algum local, o cdigo no ser compilado. Por isso so chamadas de verificadas o compilador verifica para se certificar se elas foram declaradas ou manipuladas.
52
Declarao de exceo
No-verificada:
Excees de tempo de execuo so consideradas como no-verificadas. Todas as excees que no so derivadas de java.lang.RuntimeException, so verificadas.
53
54
Para criar uma classe de Exceo prpria, basta criar uma subclasse de Exception.
55
Exemplo
Ao chamar um mtodo com uma exceo declarada, a mesma dever tratada ou reportada.
Sobrecarregando os construtores de MinhaExcecao, possvel simplesmente definir uma mensagem, uma causa ou ambas.
57
58
Sumrio
Introduo e conceitos Capturando exceo usando try, catch e Finally Propagando excees no capturadas Lanando excees Hierarquia de excees Correspondncia de exceo Declaraes de excees
Prof. Marcos Andr Pisching, M.Sc. 59
Excees
Marcos Andr Pisching marcos.pisching@ifsc.edu.br