SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Java  2  9.	
  Controle	
  de	
  erros	
  e	
  exceções	
  
Helder da Rocha (helder@ibpinet.net)
Programação	
  em	
  
INTRODUÇÃO À PROGRAMAÇÃO EM JAVA - ASIT - 02/03/1999
Java  2  
Curso de Programação em Java 22
Controle de erros com Exceções
•  Exceções são
§  Erros de tempo de execução
§  Objetos criados a partir de classes especiais que são
"lançados" quando ocorrem condições excepcionais
•  Métodos podem capturar ou deixar passar
exceções que ocorrerem em seu corpo
§  É obrigatório, para a maior parte das exceções, que
o método declare quaisquer exceções que ele não
capturar
•  Mecanismo try-catch é usado para tentar capturar
exceções enquanto elas passam por métodos
Java  2  
Curso de Programação em Java 23
Três tipos de erros de
tempo de execução
•  1. Erros de lógica de programação
§  ex: limites do vetor ultrapassados, divisão por zero
§  devem ser corrigidos pelo programador
•  2. Erros devido a condições do ambiente de execução
§  ex: arquivo não encontrado, rede fora do ar, etc.
§  fogem do controle do programador mas podem ser
contornados em tempo de execução
•  3. Erros graves onde não adianta tentar recuperação
§  ex: falta de memória, erro interno do JVM
§  fogem do controle do programador e não podem ser
contornados
Java  2  
Curso de Programação em Java 24
Como causar uma exceção?
•  Uma exceção é um tipo de objeto que sinaliza que uma
condição excepcional ocorreu
§  A identificação (nome da classe) é sua parte mais importante
•  Precisa ser criada com new e depois lançada com throw
IllegalArgumentException e = new
IllegalArgumentException("Erro!");
throw e; // exceção foi lançada!
•  A referência é desnecessária. A sintaxe abaixo é mais
usual:
throw new IllegalArgumentException("Erro!");
Java  2  
Curso de Programação em Java 25
Exceções e métodos
•  Uma declaração throws é obrigatório em métodos e
construtores que deixam de capturar uma ou mais
exceções que ocorrem em seu interior
public void m() throws Excecao1, Excecao2 {...}
public Circulo() throws ExcecaoDeLimite {...}
•  throws declara que o método pode provocar exceções
do tipo declarado (ou de qualquer subtipo)
§  A declaração abaixo declara que o método pode provocar
qualquer exceção (não faça isto)
§  public void m() throws Exception {...}
•  Métodos sobrepostos não podem provocar mais
exceções que os métodos originais
Java  2  
Curso de Programação em Java 26
O que acontece?
•  Uma exceção lançada interrompe o fluxo
normal do programa
§  O fluxo do programa segue a exceção
§  Se o método onde ela ocorrer não a capturar, ela
será propagada para o método que chamar esse
método e assim por diante
§  Se ninguém capturar a exceção, ela irá causar o
término da aplicação
§  Se em algum lugar ela for capturada, o controle
pode ser recuperado
Java  2  
Curso de Programação em Java 27
Captura e declaração de exceções
public class RelatorioFinanceiro {
public void metodoMau() throws ExcecaoDeContabilidade {
if (!dadosCorretos) {
throw new ExcecaoDeContabilidade("Dados Incorretos");
}
}
public void metodoBom() {
try {
... instruções ...
metodoMau();
... instruções ...
} catch (ExcecaoDeContabilidade ex) {
System.out.println("Erro: " + ex.getMessage());
}
... instruções ...
}
}
instruções que sempre
serão executadas
instruções serão executadas
se exceção não ocorrer
instruções serão executadas
se exceção não ocorrer ou
se ocorrer e for capturada
Java  2  
Curso de Programação em Java 28
try e catch
•  O bloco try "tenta" executar um bloco
de código que potencialmente causa
exceção
•  Deve ser seguido por
§  Um ou mais blocos catch(TipoDeExcecao ref)
§  E/ou um bloco finally
•  Os blocos catch recebem
como argumento um
tipo de exceção
§  Se ocorrer uma exceção no
try, ela irá descer pelos
catch até encontrar um
que declare capturar
exceções de uma classe ou
superclasse da exceção
§  Apenas um dos blocos
catch é executado
try {
... instruções ...
} catch (TipoExcecao1 ex) {
... faz alguma coisa ...
} catch (TipoExcecao2 ex) {
... faz alguma coisa ...
} catch (Exception ex) {
... faz alguma coisa ...
}
... continuação ...
Exception
TipoExcecao1
TipoExcecao2
TipoExcecao3
Java  2  
Curso de Programação em Java 29
finally
•  O bloco try não pode aparecer sozinho
§  deve ser seguido por pelo menos um catch ou por um finally
•  O bloco finally contém instruções que devem se
executadas independentemente da ocorrência ou não
de exceções
try {
// instruções: executa até linha onde ocorrer exceção
} catch (TipoExcecao1 ex) {
// executa somente se ocorrer TipoExcecao1
} catch (TipoExcecao2 ex) {
// executa somente se ocorrer TipoExcecao2
} finally {
// executa sempre ...
}
// executa se exceção for capturada ou se não ocorrer
Java  2  
Curso de Programação em Java 210
Como criar uma exceção
•  A não ser que você esteja construindo uma API de
baixo-nível ou uma ferramenta de desenvolvimento,
você so usará exceções do tipo (2) (veja página 3)
•  Para criar uma classe que represente sua exceção,
basta estender java.lang.Exception:
class NovaExcecao extends Exception {}
•  Não precisa de mais nada. O mais importante é
herdar de Exception e fornecer uma identificação
diferente
§  Bloco catch usa nome da classe para identificar exceções.
Java  2  
Curso de Programação em Java 211
Como criar uma exceção (2)
•  Você também pode acrescentar métodos, campos de
dados e construtores como em qualquer classe.
•  É comum é criar a classe com dois construtores
class NovaExcecao extends Exception {
public Exception() {}
public Exception(String mensagem) {
super(mensagem);
}
}
•  Esta implementação permite passar mensagem que
será lida através de toString() e getMessage()
Java  2  
Curso de Programação em Java 212
Principais métodos
•  Construtores de Exception
§  Exception (String message)
§  Exception ()
•  Métodos de Exception
§  String getMessage()
•  Retorna mensagem passada pelo construtor
§  String toString()
•  Retorna nome da exceção e mensagem
§  void printStackTrace()
•  imprime detalhes sobre exceção
Java  2  
Curso de Programação em Java 213
Como pegar qualquer exceção
•  Se, entre os blocos catch, houver exceções da
mesma hierarquia de classes, as classes mais
específicas (que estão mais abaixo na hierarquia)
devem aparecer primeiro
§  Se uma classe genérica (ex: Exception) aparecer antes de
uma mais específica, uma exceção do tipo da específica
jamais será capturado
§  O compilador detecta a situação acima e não compila o
código
•  Para pegar qualquer exceção, faça um catch que
pegue a classe Exception
catch (Exception e) { ... }
Java  2  
Curso de Programação em Java 214
Relançar uma exceção
•  Às vezes, após a captura de uma exceção, é
desejável relançá-la para que outros métodos lidem
com ela
§  Isto pode ser feito da seguinte forma
public void metodo() throws ExcecaoSimples {
try {
// instruções
} catch (ExcecaoSimples ex) {
// faz alguma coisa para lidar com a exceção
throw ex; // relança exceção
}
}
Java  2  
Curso de Programação em Java 215
Classes base da API
•  RuntimeException e Error
§  Exceções não verificadas em tempo de compilação
§  Subclasses de Error não devem ser capturadas (são
situações graves em que a recuperação é impossível ou
indesejável)
§  Subclasses de RuntimeException representam erros de
lógica de programação que devem ser corrigidos (podem,
mas não devem ser capturadas: erros devem ser corrigidos)
•  Exception
§  Exceções verificadas em tempo de compilação (exceção à
regra são as subclasses de RuntimeException)
§  Compilador exige que sejam ou capturadas ou declaradas
pelo método que potencialmente as provoca
Java  2  
Curso de Programação em Java 216
Hierarquia
Object
Throwable
Exception Error
RuntimeException
Condições excepcionais
checadas pelo compilador
(eventos recuperáveis)
Erros não checados
pelo compilador
(eventos irrecuperáveis)
Exceções não
checadas pelo
compilador
(erros de lógica)
OutOfMemoryError
InternalError
VirtualMachineError
UnknownError
...
IOException
FileNotFoundException
MinhaExcecao
SuaExcecao
...
ClassCastException
NullPointerException
NumberFormatException
ArrayIndexOutOfBoundsException
...
Java  2  
Curso de Programação em Java 217
Movimento de exceções
•  Exceções são provocadas dentro de métodos, blocos de
inicialização ou construtores
§  métodos e construtores podem capturá-las ou deixá-las acontecer
(neste caso devem declarar quais exceções provocam)
§  blocos de inicialização static devem capturar todas as exceções
•  Repasse de exceções
§  métodos que se declaram possíveis causadores de uma exceção,
repassam o objeto para o método que o chamou que, por sua vez,
pode capturá-la ou repassá-la
§  a declaração é feita com a palavra throws (não confunda com throw)
•  Captura de exceções
§  trechos de código que podem provocar exceção (que chamam
métodos que causam exceções ou que possuem instruções throw)
devem ser declarados dentro de um bloco try
§  Um ou mais blocos catch seguem o bloco try e capturam exceções
selecionadas pelo nome da classe
Java  2  
Curso de Programação em Java 218
Exercícios
•  Do livro texto, Capítulo 10
§  1, 2, 3
§  Extras: 5, 8, 9
Java  2  
Curso de Programação em Java 219
1. try {
2. URL u = new URL(s); // assume s is a previously defined String
3. Object o = in.readObject(); // in is a valid ObjectInputStream
4. System.out.println("Success");
5. }
6. catch (MalformedURLException e) {
7. System.out.println("Bad URL");
8. }
9. catch (StreamCorruptedException e) {
10. System.out.println("Bad file contents");
11. }
12. catch (Exception e) {
13. System.out.println("General exception");
14. }
15. finally {
16. System.out.println("doing finally part");
17. }
18. System.out.println("Carrying on");
Testes (Enunciado parte 1)
•  Considere o seguinte código
Java  2  
Curso de Programação em Java 220
Testes (Enunciado parte 2)
java.lang.Exception
java.io.IOException
java.io.StreamCorruptedException java.net.MalformedURLException
•  Considere a seguinte hierarquia
java.lang.Throwable
java.lang.Error
java.lang.OutOfMemoryError
Java  2  
Curso de Programação em Java 221
Teste 1
•  1. Que linhas são impressas se os métodos
das linhas 2 e 3 completarem com sucesso
sem provocar exceções?
§  A. Success
§  B. Bad URL
§  C. Bad File Contents
§  D. General Exception
§  E. Doing finally part
§  F. Carrying on
Java  2  
Curso de Programação em Java 222
Teste 2
•  2. Que linhas são impressas se o método da
linha 3 provocar um OutOfMemoryError?
§  A. Success
§  B. Bad URL
§  C. Bad File Contents
§  D. General Exception
§  E. Doing finally part
§  F. Carrying on
Java  2  
Curso de Programação em Java 223
Teste 3
•  3. Que linhas são impressas se o método da
linha 2 provocar uma MalformedURLException?
§  A. Success
§  B. Bad URL
§  C. Bad File Contents
§  D. General Exception
§  E. Doing finally part
§  F. Carrying on
Java  2  
Curso de Programação em Java 224
Teste 4
•  4. Que linhas são impressas se o método da
linha 3 provocar um IOException?
§  A. Success
§  B. Bad URL
§  C. Bad File Contents
§  D. General Exception
§  E. Doing finally part
§  F. Carrying on

Mais conteúdo relacionado

Mais procurados (19)

Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
Excecoes
ExcecoesExcecoes
Excecoes
 
Excepções JAVA
Excepções JAVAExcepções JAVA
Excepções JAVA
 
Tratamento de erros
Tratamento de errosTratamento de erros
Tratamento de erros
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções java
 
Programação Orientada por Objectos - Aula 5
Programação Orientada por Objectos - Aula 5Programação Orientada por Objectos - Aula 5
Programação Orientada por Objectos - Aula 5
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
6 excecoes
6 excecoes6 excecoes
6 excecoes
 
Ferramentas testes2003
Ferramentas testes2003Ferramentas testes2003
Ferramentas testes2003
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Exceptions
ExceptionsExceptions
Exceptions
 
Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3
 
Power mock
Power mockPower mock
Power mock
 
Java cert programmer (assertions)
Java cert programmer (assertions)Java cert programmer (assertions)
Java cert programmer (assertions)
 
Threads e Estruturas de dados
Threads e Estruturas de dadosThreads e Estruturas de dados
Threads e Estruturas de dados
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de Erros
 
Aexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddAexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tdd
 

Destaque

Gráficos Vetoriais na Web com SVG
Gráficos Vetoriais na Web com SVGGráficos Vetoriais na Web com SVG
Gráficos Vetoriais na Web com SVGHelder da Rocha
 
Technical and product information v1
Technical and product information v1Technical and product information v1
Technical and product information v1Ahmad Barakat
 
Fêtes de noel_15_12 (1)
Fêtes de noel_15_12 (1)Fêtes de noel_15_12 (1)
Fêtes de noel_15_12 (1)Samy Bentaïeb
 
Les modifications sur la comptabilisation ias 12
Les modifications sur la comptabilisation ias 12Les modifications sur la comptabilisation ias 12
Les modifications sur la comptabilisation ias 12Driss Tissoudal
 
Visão geral da segurança em Java EE
Visão geral da segurança em Java EEVisão geral da segurança em Java EE
Visão geral da segurança em Java EEHelder da Rocha
 

Destaque (7)

Gráficos Vetoriais na Web com SVG
Gráficos Vetoriais na Web com SVGGráficos Vetoriais na Web com SVG
Gráficos Vetoriais na Web com SVG
 
Technical and product information v1
Technical and product information v1Technical and product information v1
Technical and product information v1
 
Laboratorio
Laboratorio Laboratorio
Laboratorio
 
Fêtes de noel_15_12 (1)
Fêtes de noel_15_12 (1)Fêtes de noel_15_12 (1)
Fêtes de noel_15_12 (1)
 
Les modifications sur la comptabilisation ias 12
Les modifications sur la comptabilisation ias 12Les modifications sur la comptabilisation ias 12
Les modifications sur la comptabilisation ias 12
 
Lipidos
LipidosLipidos
Lipidos
 
Visão geral da segurança em Java EE
Visão geral da segurança em Java EEVisão geral da segurança em Java EE
Visão geral da segurança em Java EE
 

Semelhante a Java Exceptions Guide

Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesAdriano Teixeira de Souza
 
Tratamento de exceção em java
Tratamento de exceção em javaTratamento de exceção em java
Tratamento de exceção em javaMarques Amaro
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - IIFabio Moura Pereira
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIFabio Moura Pereira
 
[Curso Java Basico - Exceptions] Aula 47: try, catch
[Curso Java Basico - Exceptions] Aula 47: try, catch[Curso Java Basico - Exceptions] Aula 47: try, catch
[Curso Java Basico - Exceptions] Aula 47: try, catchLoiane Groner
 
Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java IVerônica Veiga
 
[Curso Java Basico - Exceptions] Aula 49: finally
[Curso Java Basico - Exceptions] Aula 49: finally[Curso Java Basico - Exceptions] Aula 49: finally
[Curso Java Basico - Exceptions] Aula 49: finallyLoiane Groner
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockitoRenan Uchôa
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Natanael Fonseca
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceçõesFAFICA
 

Semelhante a Java Exceptions Guide (15)

Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 
Excecoes em Java
Excecoes em JavaExcecoes em Java
Excecoes em Java
 
Tratamento de exceção em java
Tratamento de exceção em javaTratamento de exceção em java
Tratamento de exceção em java
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - II
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
[Curso Java Basico - Exceptions] Aula 47: try, catch
[Curso Java Basico - Exceptions] Aula 47: try, catch[Curso Java Basico - Exceptions] Aula 47: try, catch
[Curso Java Basico - Exceptions] Aula 47: try, catch
 
Java Básico :: Exceções
Java Básico :: ExceçõesJava Básico :: Exceções
Java Básico :: Exceções
 
Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java I
 
[Curso Java Basico - Exceptions] Aula 49: finally
[Curso Java Basico - Exceptions] Aula 49: finally[Curso Java Basico - Exceptions] Aula 49: finally
[Curso Java Basico - Exceptions] Aula 49: finally
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockito
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 

Mais de Helder da Rocha

Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsHelder da Rocha
 
Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Helder da Rocha
 
TDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosTDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosHelder da Rocha
 
Padrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasPadrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasHelder da Rocha
 
Visualização de dados e a Web
Visualização de dados e a WebVisualização de dados e a Web
Visualização de dados e a WebHelder da Rocha
 
Eletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosEletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosHelder da Rocha
 
Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Helder da Rocha
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8Helder da Rocha
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Helder da Rocha
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Helder da Rocha
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: SincronizadoresHelder da Rocha
 

Mais de Helder da Rocha (20)

Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.js
 
Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)
 
TDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosTDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativos
 
Padrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasPadrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemas
 
Visualização de dados e a Web
Visualização de dados e a WebVisualização de dados e a Web
Visualização de dados e a Web
 
Eletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosEletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativos
 
Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
Java 9, 10, 11
Java 9, 10, 11Java 9, 10, 11
Java 9, 10, 11
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: Sincronizadores
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 

Java Exceptions Guide

  • 1. Java  2  9.  Controle  de  erros  e  exceções   Helder da Rocha (helder@ibpinet.net) Programação  em   INTRODUÇÃO À PROGRAMAÇÃO EM JAVA - ASIT - 02/03/1999
  • 2. Java  2   Curso de Programação em Java 22 Controle de erros com Exceções •  Exceções são §  Erros de tempo de execução §  Objetos criados a partir de classes especiais que são "lançados" quando ocorrem condições excepcionais •  Métodos podem capturar ou deixar passar exceções que ocorrerem em seu corpo §  É obrigatório, para a maior parte das exceções, que o método declare quaisquer exceções que ele não capturar •  Mecanismo try-catch é usado para tentar capturar exceções enquanto elas passam por métodos
  • 3. Java  2   Curso de Programação em Java 23 Três tipos de erros de tempo de execução •  1. Erros de lógica de programação §  ex: limites do vetor ultrapassados, divisão por zero §  devem ser corrigidos pelo programador •  2. Erros devido a condições do ambiente de execução §  ex: arquivo não encontrado, rede fora do ar, etc. §  fogem do controle do programador mas podem ser contornados em tempo de execução •  3. Erros graves onde não adianta tentar recuperação §  ex: falta de memória, erro interno do JVM §  fogem do controle do programador e não podem ser contornados
  • 4. Java  2   Curso de Programação em Java 24 Como causar uma exceção? •  Uma exceção é um tipo de objeto que sinaliza que uma condição excepcional ocorreu §  A identificação (nome da classe) é sua parte mais importante •  Precisa ser criada com new e depois lançada com throw IllegalArgumentException e = new IllegalArgumentException("Erro!"); throw e; // exceção foi lançada! •  A referência é desnecessária. A sintaxe abaixo é mais usual: throw new IllegalArgumentException("Erro!");
  • 5. Java  2   Curso de Programação em Java 25 Exceções e métodos •  Uma declaração throws é obrigatório em métodos e construtores que deixam de capturar uma ou mais exceções que ocorrem em seu interior public void m() throws Excecao1, Excecao2 {...} public Circulo() throws ExcecaoDeLimite {...} •  throws declara que o método pode provocar exceções do tipo declarado (ou de qualquer subtipo) §  A declaração abaixo declara que o método pode provocar qualquer exceção (não faça isto) §  public void m() throws Exception {...} •  Métodos sobrepostos não podem provocar mais exceções que os métodos originais
  • 6. Java  2   Curso de Programação em Java 26 O que acontece? •  Uma exceção lançada interrompe o fluxo normal do programa §  O fluxo do programa segue a exceção §  Se o método onde ela ocorrer não a capturar, ela será propagada para o método que chamar esse método e assim por diante §  Se ninguém capturar a exceção, ela irá causar o término da aplicação §  Se em algum lugar ela for capturada, o controle pode ser recuperado
  • 7. Java  2   Curso de Programação em Java 27 Captura e declaração de exceções public class RelatorioFinanceiro { public void metodoMau() throws ExcecaoDeContabilidade { if (!dadosCorretos) { throw new ExcecaoDeContabilidade("Dados Incorretos"); } } public void metodoBom() { try { ... instruções ... metodoMau(); ... instruções ... } catch (ExcecaoDeContabilidade ex) { System.out.println("Erro: " + ex.getMessage()); } ... instruções ... } } instruções que sempre serão executadas instruções serão executadas se exceção não ocorrer instruções serão executadas se exceção não ocorrer ou se ocorrer e for capturada
  • 8. Java  2   Curso de Programação em Java 28 try e catch •  O bloco try "tenta" executar um bloco de código que potencialmente causa exceção •  Deve ser seguido por §  Um ou mais blocos catch(TipoDeExcecao ref) §  E/ou um bloco finally •  Os blocos catch recebem como argumento um tipo de exceção §  Se ocorrer uma exceção no try, ela irá descer pelos catch até encontrar um que declare capturar exceções de uma classe ou superclasse da exceção §  Apenas um dos blocos catch é executado try { ... instruções ... } catch (TipoExcecao1 ex) { ... faz alguma coisa ... } catch (TipoExcecao2 ex) { ... faz alguma coisa ... } catch (Exception ex) { ... faz alguma coisa ... } ... continuação ... Exception TipoExcecao1 TipoExcecao2 TipoExcecao3
  • 9. Java  2   Curso de Programação em Java 29 finally •  O bloco try não pode aparecer sozinho §  deve ser seguido por pelo menos um catch ou por um finally •  O bloco finally contém instruções que devem se executadas independentemente da ocorrência ou não de exceções try { // instruções: executa até linha onde ocorrer exceção } catch (TipoExcecao1 ex) { // executa somente se ocorrer TipoExcecao1 } catch (TipoExcecao2 ex) { // executa somente se ocorrer TipoExcecao2 } finally { // executa sempre ... } // executa se exceção for capturada ou se não ocorrer
  • 10. Java  2   Curso de Programação em Java 210 Como criar uma exceção •  A não ser que você esteja construindo uma API de baixo-nível ou uma ferramenta de desenvolvimento, você so usará exceções do tipo (2) (veja página 3) •  Para criar uma classe que represente sua exceção, basta estender java.lang.Exception: class NovaExcecao extends Exception {} •  Não precisa de mais nada. O mais importante é herdar de Exception e fornecer uma identificação diferente §  Bloco catch usa nome da classe para identificar exceções.
  • 11. Java  2   Curso de Programação em Java 211 Como criar uma exceção (2) •  Você também pode acrescentar métodos, campos de dados e construtores como em qualquer classe. •  É comum é criar a classe com dois construtores class NovaExcecao extends Exception { public Exception() {} public Exception(String mensagem) { super(mensagem); } } •  Esta implementação permite passar mensagem que será lida através de toString() e getMessage()
  • 12. Java  2   Curso de Programação em Java 212 Principais métodos •  Construtores de Exception §  Exception (String message) §  Exception () •  Métodos de Exception §  String getMessage() •  Retorna mensagem passada pelo construtor §  String toString() •  Retorna nome da exceção e mensagem §  void printStackTrace() •  imprime detalhes sobre exceção
  • 13. Java  2   Curso de Programação em Java 213 Como pegar qualquer exceção •  Se, entre os blocos catch, houver exceções da mesma hierarquia de classes, as classes mais específicas (que estão mais abaixo na hierarquia) devem aparecer primeiro §  Se uma classe genérica (ex: Exception) aparecer antes de uma mais específica, uma exceção do tipo da específica jamais será capturado §  O compilador detecta a situação acima e não compila o código •  Para pegar qualquer exceção, faça um catch que pegue a classe Exception catch (Exception e) { ... }
  • 14. Java  2   Curso de Programação em Java 214 Relançar uma exceção •  Às vezes, após a captura de uma exceção, é desejável relançá-la para que outros métodos lidem com ela §  Isto pode ser feito da seguinte forma public void metodo() throws ExcecaoSimples { try { // instruções } catch (ExcecaoSimples ex) { // faz alguma coisa para lidar com a exceção throw ex; // relança exceção } }
  • 15. Java  2   Curso de Programação em Java 215 Classes base da API •  RuntimeException e Error §  Exceções não verificadas em tempo de compilação §  Subclasses de Error não devem ser capturadas (são situações graves em que a recuperação é impossível ou indesejável) §  Subclasses de RuntimeException representam erros de lógica de programação que devem ser corrigidos (podem, mas não devem ser capturadas: erros devem ser corrigidos) •  Exception §  Exceções verificadas em tempo de compilação (exceção à regra são as subclasses de RuntimeException) §  Compilador exige que sejam ou capturadas ou declaradas pelo método que potencialmente as provoca
  • 16. Java  2   Curso de Programação em Java 216 Hierarquia Object Throwable Exception Error RuntimeException Condições excepcionais checadas pelo compilador (eventos recuperáveis) Erros não checados pelo compilador (eventos irrecuperáveis) Exceções não checadas pelo compilador (erros de lógica) OutOfMemoryError InternalError VirtualMachineError UnknownError ... IOException FileNotFoundException MinhaExcecao SuaExcecao ... ClassCastException NullPointerException NumberFormatException ArrayIndexOutOfBoundsException ...
  • 17. Java  2   Curso de Programação em Java 217 Movimento de exceções •  Exceções são provocadas dentro de métodos, blocos de inicialização ou construtores §  métodos e construtores podem capturá-las ou deixá-las acontecer (neste caso devem declarar quais exceções provocam) §  blocos de inicialização static devem capturar todas as exceções •  Repasse de exceções §  métodos que se declaram possíveis causadores de uma exceção, repassam o objeto para o método que o chamou que, por sua vez, pode capturá-la ou repassá-la §  a declaração é feita com a palavra throws (não confunda com throw) •  Captura de exceções §  trechos de código que podem provocar exceção (que chamam métodos que causam exceções ou que possuem instruções throw) devem ser declarados dentro de um bloco try §  Um ou mais blocos catch seguem o bloco try e capturam exceções selecionadas pelo nome da classe
  • 18. Java  2   Curso de Programação em Java 218 Exercícios •  Do livro texto, Capítulo 10 §  1, 2, 3 §  Extras: 5, 8, 9
  • 19. Java  2   Curso de Programação em Java 219 1. try { 2. URL u = new URL(s); // assume s is a previously defined String 3. Object o = in.readObject(); // in is a valid ObjectInputStream 4. System.out.println("Success"); 5. } 6. catch (MalformedURLException e) { 7. System.out.println("Bad URL"); 8. } 9. catch (StreamCorruptedException e) { 10. System.out.println("Bad file contents"); 11. } 12. catch (Exception e) { 13. System.out.println("General exception"); 14. } 15. finally { 16. System.out.println("doing finally part"); 17. } 18. System.out.println("Carrying on"); Testes (Enunciado parte 1) •  Considere o seguinte código
  • 20. Java  2   Curso de Programação em Java 220 Testes (Enunciado parte 2) java.lang.Exception java.io.IOException java.io.StreamCorruptedException java.net.MalformedURLException •  Considere a seguinte hierarquia java.lang.Throwable java.lang.Error java.lang.OutOfMemoryError
  • 21. Java  2   Curso de Programação em Java 221 Teste 1 •  1. Que linhas são impressas se os métodos das linhas 2 e 3 completarem com sucesso sem provocar exceções? §  A. Success §  B. Bad URL §  C. Bad File Contents §  D. General Exception §  E. Doing finally part §  F. Carrying on
  • 22. Java  2   Curso de Programação em Java 222 Teste 2 •  2. Que linhas são impressas se o método da linha 3 provocar um OutOfMemoryError? §  A. Success §  B. Bad URL §  C. Bad File Contents §  D. General Exception §  E. Doing finally part §  F. Carrying on
  • 23. Java  2   Curso de Programação em Java 223 Teste 3 •  3. Que linhas são impressas se o método da linha 2 provocar uma MalformedURLException? §  A. Success §  B. Bad URL §  C. Bad File Contents §  D. General Exception §  E. Doing finally part §  F. Carrying on
  • 24. Java  2   Curso de Programação em Java 224 Teste 4 •  4. Que linhas são impressas se o método da linha 3 provocar um IOException? §  A. Success §  B. Bad URL §  C. Bad File Contents §  D. General Exception §  E. Doing finally part §  F. Carrying on