SlideShare una empresa de Scribd logo
1 de 75
Curso Preparatório para
Certificação Java
Prof.º Eduardo Mendes
Certificação Java
Prof.º Eduardo Mendes
Agenda
  A certificação de programador Java
  Revisão
  Declarações e Controle de Acesso
  Orientação a Objetos
  Atribuições
  Operadores
  Controle de Fluxo, Exceções e Assertivas
  String, E/S (I/O), Formatação e Parsing
  Genéricos e Conjuntos
  Classes Internas
  Threads
  Desenvolvimento
Controle de Fluxo
Exceções
e Assertivas
Manipulando
exceções
Objetivos para a certificação
2.4 Escrever códigos que façam uso apropriado
de exceções e de cláusulas
de manipulação de exceções (try, catch, finally)
e declarar método, subscritos ou não,
os quais lancem exceções
2.5 Reconhecer o efeito de uma exceção lançada em um
ponto específico do fragmento de um código.
É bom ressaltar que a exceção pode ser de tempo de
execução, verificada ou um erro.
Manipulação de exceções
Podem garantir a
robustez de uma
aplicação
Permite detectar
erros de maneira
mais fácil
Separa nitidamente o
código que manipula a
exceção do código
que gera a exceção
Permite lidar com
diferentes possíveis
exceções
Permite realizar
operações que devam
ser realizadas
independentemente
do erro
Terminologia
  Exceção
  condição excepcional
  ocorrência que altera o fluxo normal do
programa
  falhas no hardware, exaustão de recursos, erros
  Quando ocorre a condição excepcional
  uma exceção é lançada
  Manipulador de exceção
  Captura a exceção
Manipulador de exceções
Transferência de execução
programa
manipulador
de
exceções
  Problemas acontecem
  O arquivo não é encontrado
  O servidor cai
  Esgotamento de memória
  Mas como saber se o método é de risco?
  O que identifica um código que pode sofrer esta
situação excepcional?
Manipulação de exceções
MusicTest1.java
import javax.sound.midi.*;
public class MusicTest1 {
public void play() {
Sequencer sequencer = MidiSystem.getSequencer();
System.out.println(“Temos um sequenciador”);
}
public static void main(String args[]) {
MusicTest1 mt = new MusicTest1();
mt.play();
}
}
O que acontece quando
você usa método de risco???
  Você quer chamar um método de uma classe
que você não escreveu
O que acontece quando
você usa método de risco???
  O método faz algo arriscado, algo que talvez
não funcione em tempo de execução
O que acontece quando
você usa método de risco???
  Você precisa saber que está chamando um
método de risco
O que acontece quando
você usa método de risco???
  Você escreve o código que trata a falha, caso
ocorra. Você tem que estar preparado, neste
caso
“Algo ruim aconteceu.
Eu falhei”
  Mecanismo simples e claro
  Se um método pode falhar, ele deve declarar que
pode ocorrer a falha, assim é possível se precaver
  Como saber se um método lança uma
exceção???
   THROWS
O método getSequencer()
try/catch
  O compilador precisa saber que você sabe que
está se arriscando
public class MusicTest1 {
public void play() {
try {
Sequencer sequencer = MidiSystem.getSequencer();
System.out.println(“Temos um sequenciador”);
} catch (Exception e) { //manipulação }
}
public static void main(String args[]) {
MusicTest1 mt = new MusicTest1();
mt.play();
}
}
Manipulador de exceções
  try
  indica um bloco de código que pode lançar
exceções
  região protegida
  catch
  associa um tipo de exceção a um bloco de
código que pode tratá-la
  finally
  realiza código dependente do bloco try e
independente da exceção ser lançada
Manipulador de exceção
1. try {
2. // Primeira linha da região protegida
3. // que é controlada pela palavra-chave try
4. // Coloque aqui o código que pode lançar exceção
5. // Várias linhas ou apenas uma
6. }
7. catch(PrimeiraException) {
8. // Ponha o código que manipula a exceção
11. }
12. catch(SegundaException) {
13. // Ponha o código aqui que manipula a exceção
14. }
15.
16. // Códigos que não necessitam de proteção
Exemplo em pseudocódigo
try {
captureUmArquivoQueEstaNaRede
leiaArquivoePopuleaTabela
}
catch(NaoConsegueCapturarArquivoRedeException) {
usarArquivoLocal
}
continuaExecucao
Exemplo em pseudocódigo 2
try {
captureUmArquivoQueEstaNaRede
leiaArquivoePopuleaTabela
}
catch(NaoConsegueCapturarArquivoRedeException) {
usarArquivoLocal
} finally {
liberarArquivoUsado
}
continuaExecucao
Preparando o bolo
try {
prepararReceitaBolo
ligarForno
colocarBoloNoForno
}
catch(BoloQueimadoException) {
retirarBoloDoForno
} finally {
desligarForno
}
Manipulador de exceções
regras
  Após um bloco try
  um ou mais blocos catch
  ou um bloco finally
  blocos catch
  deve vir imediatamente um após o outro
  não pode haver blocos de código entre eles
  deve ser precedido de um try
  finally
  executa independente de ter sido lançada uma
exceção ou não
  deve ser precedido de um try ou de um try/catch
Formas válidas
try {
// executa algo
} finally {
// limpa o código
}
PODE
Formas válidas
try {
// fazerAlgo
} catch (AlgumaException ex) {
// manipular exceção
} finally {
// limpar
}
PODE
Formas válidas
try {
// fazer algo
}
System.out.println(
“fora do bloco");
NÃO PODE
Formas válidas
try {
// fazer algo
}
System.out.println(
“fora do bloco");
catch(Exception ex) { }
NÃO PODE
observação
pode-se omitir
o catch ou finally
mas
não é permitido
se omitir ambos
Propagando exceções não
capturadas
Propagando exceções
Propagando exceções
main()
metodo1()
metodo2()
metodoPerigoso()
try {
} finally {
}
exception
Definindo exceções
Definindo exceções
  Subclasses java.lang.Exception
try {
// algum código
}
catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
Definindo Exceções
Object
Throwable
Error Exception
Runtime
Exception
Hierarquias de exceções
•  Objetos que podem ser lançados e capturados
•  define subclasses que representam situações
incomuns
•  aplicações, em geral, não conseguem se recuperar
•  causados por indisponibilidade de recurso
•  condição exigida não satisfeita
•  Geralmente indicam erros no programa
•  Podem ser algum erro difícil de identificar
Manipulando as exceções
  Polimorfismo é válido na captura de exceções
  1 única cláusula catch pode capturar mais que
um tipo exceção
try {
//codigo que pode lancar
} catch (MinhaExcecao e) {
}
se esta exceção tiver subclasses, este bloco
catch será capaz de capturar exceções
deste tipo e de todas as subclasses
Dito isto
  O bloco abaixo captura qualquer exceção
try {
//codigo que pode lancar
} catch (Exception e) {
}
Provavelmente
não é a melhor opção.
Geralmente é preciso tratar as
exceções de forma distinta
Exceção sem subclasses
  Catches com exceções sem subclasses
  SÓ PODEM capturar aquele tipo
try {
//codigo que pode lancar
} catch
(StringIndexOutOfBoundsException e) {
e.printStackTrace();
}
Voltando às subclasses
RoupaException
CalcaException CamisaException
MangaLongaException QueroSerForteException
Voltando às subclasses
RoupaException
CalcaException CamisaException
MangaLongaException QueroSerForteExeption
Se um código é capaz de
lançar várias exceções de
uma mesma hierarquia
E se quiser manipular
cada uma individualmente
os blocos catches devem
tratar da mais específica
para mais geral
Códigos válidos
try {
maquinaDeLavar.lavarRoupa();
} catch (QueroSerForteException e) {
//Trata só os problemas da queroSerForte
} catch (CamisaException e) {
//Trata só os problemas de Camisa
} catch (RoupaException e) {
//Trata só os problemas de todo resto
}
Códigos válidos
try {
maquinaDeLavar.lavarRoupa();
} catch (MangaLongaException e) {
//Trata só os problemas da MangaLonga
} catch (CamisaException e) {
//Trata só os problemas de Camisa
} catch (RoupaException e) {
//Trata só os problemas de todo resto
}
Códigos válidos
try {
maquinaDeLavar.lavarRoupa();
} catch (CalcaException e) {
//Trata só os problemas da Calca
} catch (CamisaException e) {
//Trata só os problemas de Camisa
} catch (RoupaException e) {
//Trata só os problemas de todo resto
}
Códigos válidos
try {
maquinaDeLavar.lavarRoupa();
} catch (RoupaException e) {
//Trata o erro de todas as roupas do //
mesmo jeito
}
Inválido
try {
maquinaDeLavar.lavarRoupa();
} catch (RoupaException e) {
//tratamento
} catch (CamisaException e) {
//tratamento
} catch (QueroSerForteException e) {
//tratamento
}
A exceção é propagada
main()
metodo1()
metodo2()
metodoPerigoso() exception
Declaração de exceções
Métodos que lançam exceção
  Métodos que podem lançar exceção
  devem declarar que podem lançar a exceção
  a menos que sejam subclasses RuntimeException
  exceções verificadas
  a lista de exceções constituem a interface pública
do método
  Use o throws
void meuMetodo() throws Excecao1,
Excecao2 {
//codigo do método
}
verb to throw
Imperative
throw
Present
I
throw
you
throw
he throws
we
throw
you
throw
they
throw
Utilizando o meu método
tratando tudo
void meuMetodo() throws Excecao1, Excecao2 {
//codigo do método
}
void usarMeuMetodo() {
try {
meuMetodo();
} catch (Excecao1 e1) {
//tratamento
} catch (Excecao2 e2) {
//tratamento
}
}
Utilizando o meu método
tratando apenas 1 parte
void meuMetodo() throws Excecao1, Excecao2 {
//codigo do método
}
void usarMeuMetodo() throws Excecao2{
try {
meuMetodo();
} catch (Excecao1 e1) {
//tratamento
}
}
Utilizando o meu método
tratando apenas 1 parte
void meuMetodo() throws Excecao1, Excecao2 {
//codigo do método
}
void usarMeuMetodo() throws Excecao1{
try {
meuMetodo();
} catch (Excecao2 e2) {
//tratamento
}
}
Utilizando o meu método
e não tratando nada
void meuMetodo() throws Excecao1, Excecao2 {
//codigo do método
}
void usarMeuMetodo()
throws Excecao1, Excecao2{
meuMetodo();
}
A exceção é propagada
metodo1()
usarMeuMetodo()
meuMetodo() exception
Exceções
throws x throws
  throws
  Use a palavra reservada throws para declarar que
o método lança uma exceção
public void metodo1() throws Exception{
...
}
  throw
  Use a palavra reservada throw para lançar a
exceção
throw new Exception();
Um código
que pode lançar exceção
public class FoguetinhoMentosComCoca extends
Foguete {
private boolean explode;
public void misturarMentosComCoca()
throws ExplosaoException {
if (explode) {
throw new ExplosaoException();
}
}
}
Dica do livro
void doStuff() {
doMore();
}
void doMore() {
throw new IOException();
}
NÃO PODE
Dica do livro
void doStuff() {
doMore();
}
void doMore() throws IOException {
throw new IOException();
}
NÃO PODE
Dica do livro
void doStuff() {
try {
doMore();
} catch (IOException e) {
//tratamento
}
}
void doMore() throws IOException {
throw new IOException();
}
PODE
Exceções não verificadas
Exceções não
verificadas
Runtime
Exception
NullPointer
Exception
IndexOut
OfBound
Exception
Arithmetic
Exception
Exceções não verificadas
public class Teste {
public void metodoPode() {
throw new NullPointerException();
}
}
PODE
dica do livro
class MyException extends Exception {
void someMethod () {
doStuff();
}
void doStuff() throws MyException {
try {
throw new MyException();
}
catch(MyException me) {
throw me;
}
}
}
Quanto a classe Error
class TestEx {
public static void main (String [] args) {
metodoMau();
}
static void metodoMau() { //Não precisa declarar Error
fazerAlgo();
}
static void fazerAlgo() { //Não precisa declarar Error
try {
throw new Error();
}
catch(Error me) {
throw me; // Capturamos e relançamos
}
}
}
Erros e exceções comuns
Categorias de exceções
  Exceções da JVM
  Exceções ou erros que são exclusivos da JVM
  Exceções Programáticas
  Lançadas pelos aplicativos ou por
programadores
Exceções da JVM
  NullPointerException
  Lançada quando se tenta utilizar um variável de
referência nula
  Não como o compilador prever
  StackOverFlowError
  Lançada quando o SO fica sem espaço na RAM
Exceções lançadas
programaticamente
  Ver lista do livro

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Excecoes em Java
Excecoes em JavaExcecoes em Java
Excecoes em Java
 
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
 
Excepções JAVA
Excepções JAVAExcepções JAVA
Excepções JAVA
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
Excecoes
ExcecoesExcecoes
Excecoes
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
Tratamento de erros
Tratamento de errosTratamento de erros
Tratamento de erros
 
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
 
Exceptions
ExceptionsExceptions
Exceptions
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
6 excecoes
6 excecoes6 excecoes
6 excecoes
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Semana dois
Semana doisSemana dois
Semana dois
 
Programação defensiva
Programação defensivaProgramação defensiva
Programação defensiva
 
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
 
Java cert programmer (assertions)
Java cert programmer (assertions)Java cert programmer (assertions)
Java cert programmer (assertions)
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
Visão geral sobre Assertivas e Exceções no Java7
Visão geral sobre Assertivas e Exceções no Java7Visão geral sobre Assertivas e Exceções no Java7
Visão geral sobre Assertivas e Exceções no Java7
 
Ferramentas testes2003
Ferramentas testes2003Ferramentas testes2003
Ferramentas testes2003
 

Destacado

Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1Eduardo Mendes
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e EstrategiasEduardo Mendes
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Eduardo Mendes
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1Eduardo Mendes
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Eduardo Mendes
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupTaufan Erfiyanto
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Eduardo Mendes
 
Turbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseMarcos Sousa
 
TDD - Prática com RSpec
TDD - Prática com RSpecTDD - Prática com RSpec
TDD - Prática com RSpecEduardo Mendes
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Eduardo Mendes
 
Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeGlobalcode
 
Evolucao de software - parte 2
Evolucao de software - parte 2Evolucao de software - parte 2
Evolucao de software - parte 2Eduardo Mendes
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBCEduardo Mendes
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2Eduardo Mendes
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de RequisitosEduardo Mendes
 

Destacado (20)

Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e Estrategias
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
 
AngularJS - Rotas
AngularJS - RotasAngularJS - Rotas
AngularJS - Rotas
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own Startup
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Turbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com Eclipse
 
TDD - Prática com RSpec
TDD - Prática com RSpecTDD - Prática com RSpec
TDD - Prática com RSpec
 
Academia java intensivo
Academia java intensivoAcademia java intensivo
Academia java intensivo
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3
 
Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto Globalcode
 
Evolucao de software - parte 2
Evolucao de software - parte 2Evolucao de software - parte 2
Evolucao de software - parte 2
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBC
 
Jquery
JqueryJquery
Jquery
 
RSpec com doubles
RSpec com doublesRSpec com doubles
RSpec com doubles
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
 

Similar a Certificação Java: Exceções

Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java IVerônica Veiga
 
Tratamento de excees slide trabalho
Tratamento de excees slide trabalhoTratamento de excees slide trabalho
Tratamento de excees slide trabalhoHigor Klecyus
 
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
 
Como manipular exceções em java
Como manipular exceções em javaComo manipular exceções em java
Como manipular exceções em javadaliarafaela
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosArthur Emanuel
 
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throwsLoiane Groner
 
Programando em python excecoes
Programando em python   excecoesProgramando em python   excecoes
Programando em python excecoessamuelthiago
 
(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - Erros(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - ErrosCarlos Santos
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência JavaMario Jorge Pereira
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Natanael Fonseca
 
T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)Carlos Santos
 
Tratamento de exceções com PHP
Tratamento de exceções com PHPTratamento de exceções com PHP
Tratamento de exceções com PHPLeonardo Soares
 
LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13Carlos Santos
 

Similar a Certificação Java: Exceções (17)

Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Java3
Java3Java3
Java3
 
Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java I
 
Tratamento de excees slide trabalho
Tratamento de excees slide trabalhoTratamento de excees slide trabalho
Tratamento de excees slide trabalho
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
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
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Como manipular exceções em java
Como manipular exceções em javaComo manipular exceções em java
Como manipular exceções em java
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de Erros
 
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws
 
Programando em python excecoes
Programando em python   excecoesProgramando em python   excecoes
Programando em python excecoes
 
(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - Erros(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - Erros
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)
 
Tratamento de exceções com PHP
Tratamento de exceções com PHPTratamento de exceções com PHP
Tratamento de exceções com PHP
 
LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13
 

Más de Eduardo Mendes

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - FundamentosEduardo Mendes
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTMLEduardo Mendes
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEduardo Mendes
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Eduardo Mendes
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails Eduardo Mendes
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Eduardo Mendes
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantesEduardo Mendes
 

Más de Eduardo Mendes (20)

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - Fundamentos
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
 
Layout Fluido
Layout FluidoLayout Fluido
Layout Fluido
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
Html - Aula 4
Html - Aula 4Html - Aula 4
Html - Aula 4
 
Html - Aula 3
Html - Aula 3Html - Aula 3
Html - Aula 3
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
 
ExtJS-4
ExtJS-4ExtJS-4
ExtJS-4
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de Software
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails
 
Padrão Iterator
Padrão IteratorPadrão Iterator
Padrão Iterator
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
 
Padrão Adapter
Padrão AdapterPadrão Adapter
Padrão Adapter
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 

Certificação Java: Exceções

  • 1. Curso Preparatório para Certificação Java Prof.º Eduardo Mendes
  • 3. Agenda   A certificação de programador Java   Revisão   Declarações e Controle de Acesso   Orientação a Objetos   Atribuições   Operadores   Controle de Fluxo, Exceções e Assertivas   String, E/S (I/O), Formatação e Parsing   Genéricos e Conjuntos   Classes Internas   Threads   Desenvolvimento
  • 6. Objetivos para a certificação 2.4 Escrever códigos que façam uso apropriado de exceções e de cláusulas de manipulação de exceções (try, catch, finally) e declarar método, subscritos ou não, os quais lancem exceções 2.5 Reconhecer o efeito de uma exceção lançada em um ponto específico do fragmento de um código. É bom ressaltar que a exceção pode ser de tempo de execução, verificada ou um erro.
  • 7. Manipulação de exceções Podem garantir a robustez de uma aplicação Permite detectar erros de maneira mais fácil Separa nitidamente o código que manipula a exceção do código que gera a exceção Permite lidar com diferentes possíveis exceções Permite realizar operações que devam ser realizadas independentemente do erro
  • 8.
  • 9. Terminologia   Exceção   condição excepcional   ocorrência que altera o fluxo normal do programa   falhas no hardware, exaustão de recursos, erros   Quando ocorre a condição excepcional   uma exceção é lançada   Manipulador de exceção   Captura a exceção
  • 10. Manipulador de exceções Transferência de execução programa manipulador de exceções
  • 11.   Problemas acontecem   O arquivo não é encontrado   O servidor cai   Esgotamento de memória   Mas como saber se o método é de risco?   O que identifica um código que pode sofrer esta situação excepcional? Manipulação de exceções
  • 12. MusicTest1.java import javax.sound.midi.*; public class MusicTest1 { public void play() { Sequencer sequencer = MidiSystem.getSequencer(); System.out.println(“Temos um sequenciador”); } public static void main(String args[]) { MusicTest1 mt = new MusicTest1(); mt.play(); } }
  • 13.
  • 14. O que acontece quando você usa método de risco???   Você quer chamar um método de uma classe que você não escreveu
  • 15. O que acontece quando você usa método de risco???   O método faz algo arriscado, algo que talvez não funcione em tempo de execução
  • 16. O que acontece quando você usa método de risco???   Você precisa saber que está chamando um método de risco
  • 17. O que acontece quando você usa método de risco???   Você escreve o código que trata a falha, caso ocorra. Você tem que estar preparado, neste caso
  • 18. “Algo ruim aconteceu. Eu falhei”   Mecanismo simples e claro   Se um método pode falhar, ele deve declarar que pode ocorrer a falha, assim é possível se precaver   Como saber se um método lança uma exceção???    THROWS
  • 20. try/catch   O compilador precisa saber que você sabe que está se arriscando public class MusicTest1 { public void play() { try { Sequencer sequencer = MidiSystem.getSequencer(); System.out.println(“Temos um sequenciador”); } catch (Exception e) { //manipulação } } public static void main(String args[]) { MusicTest1 mt = new MusicTest1(); mt.play(); } }
  • 21. Manipulador de exceções   try   indica um bloco de código que pode lançar exceções   região protegida   catch   associa um tipo de exceção a um bloco de código que pode tratá-la   finally   realiza código dependente do bloco try e independente da exceção ser lançada
  • 22. Manipulador de exceção 1. try { 2. // Primeira linha da região protegida 3. // que é controlada pela palavra-chave try 4. // Coloque aqui o código que pode lançar exceção 5. // Várias linhas ou apenas uma 6. } 7. catch(PrimeiraException) { 8. // Ponha o código que manipula a exceção 11. } 12. catch(SegundaException) { 13. // Ponha o código aqui que manipula a exceção 14. } 15. 16. // Códigos que não necessitam de proteção
  • 23. Exemplo em pseudocódigo try { captureUmArquivoQueEstaNaRede leiaArquivoePopuleaTabela } catch(NaoConsegueCapturarArquivoRedeException) { usarArquivoLocal } continuaExecucao
  • 24. Exemplo em pseudocódigo 2 try { captureUmArquivoQueEstaNaRede leiaArquivoePopuleaTabela } catch(NaoConsegueCapturarArquivoRedeException) { usarArquivoLocal } finally { liberarArquivoUsado } continuaExecucao
  • 25. Preparando o bolo try { prepararReceitaBolo ligarForno colocarBoloNoForno } catch(BoloQueimadoException) { retirarBoloDoForno } finally { desligarForno }
  • 26. Manipulador de exceções regras   Após um bloco try   um ou mais blocos catch   ou um bloco finally   blocos catch   deve vir imediatamente um após o outro   não pode haver blocos de código entre eles   deve ser precedido de um try   finally   executa independente de ter sido lançada uma exceção ou não   deve ser precedido de um try ou de um try/catch
  • 27. Formas válidas try { // executa algo } finally { // limpa o código } PODE
  • 28. Formas válidas try { // fazerAlgo } catch (AlgumaException ex) { // manipular exceção } finally { // limpar } PODE
  • 29. Formas válidas try { // fazer algo } System.out.println( “fora do bloco"); NÃO PODE
  • 30. Formas válidas try { // fazer algo } System.out.println( “fora do bloco"); catch(Exception ex) { } NÃO PODE
  • 31. observação pode-se omitir o catch ou finally mas não é permitido se omitir ambos
  • 33.
  • 36.
  • 38. Definindo exceções   Subclasses java.lang.Exception try { // algum código } catch (ArrayIndexOutOfBoundsException e) { e.printStackTrace(); }
  • 40. Hierarquias de exceções •  Objetos que podem ser lançados e capturados •  define subclasses que representam situações incomuns •  aplicações, em geral, não conseguem se recuperar •  causados por indisponibilidade de recurso •  condição exigida não satisfeita •  Geralmente indicam erros no programa •  Podem ser algum erro difícil de identificar
  • 41. Manipulando as exceções   Polimorfismo é válido na captura de exceções   1 única cláusula catch pode capturar mais que um tipo exceção try { //codigo que pode lancar } catch (MinhaExcecao e) { } se esta exceção tiver subclasses, este bloco catch será capaz de capturar exceções deste tipo e de todas as subclasses
  • 42. Dito isto   O bloco abaixo captura qualquer exceção try { //codigo que pode lancar } catch (Exception e) { } Provavelmente não é a melhor opção. Geralmente é preciso tratar as exceções de forma distinta
  • 43. Exceção sem subclasses   Catches com exceções sem subclasses   SÓ PODEM capturar aquele tipo try { //codigo que pode lancar } catch (StringIndexOutOfBoundsException e) { e.printStackTrace(); }
  • 44. Voltando às subclasses RoupaException CalcaException CamisaException MangaLongaException QueroSerForteException
  • 45. Voltando às subclasses RoupaException CalcaException CamisaException MangaLongaException QueroSerForteExeption Se um código é capaz de lançar várias exceções de uma mesma hierarquia E se quiser manipular cada uma individualmente os blocos catches devem tratar da mais específica para mais geral
  • 46. Códigos válidos try { maquinaDeLavar.lavarRoupa(); } catch (QueroSerForteException e) { //Trata só os problemas da queroSerForte } catch (CamisaException e) { //Trata só os problemas de Camisa } catch (RoupaException e) { //Trata só os problemas de todo resto }
  • 47. Códigos válidos try { maquinaDeLavar.lavarRoupa(); } catch (MangaLongaException e) { //Trata só os problemas da MangaLonga } catch (CamisaException e) { //Trata só os problemas de Camisa } catch (RoupaException e) { //Trata só os problemas de todo resto }
  • 48. Códigos válidos try { maquinaDeLavar.lavarRoupa(); } catch (CalcaException e) { //Trata só os problemas da Calca } catch (CamisaException e) { //Trata só os problemas de Camisa } catch (RoupaException e) { //Trata só os problemas de todo resto }
  • 49. Códigos válidos try { maquinaDeLavar.lavarRoupa(); } catch (RoupaException e) { //Trata o erro de todas as roupas do // mesmo jeito }
  • 50. Inválido try { maquinaDeLavar.lavarRoupa(); } catch (RoupaException e) { //tratamento } catch (CamisaException e) { //tratamento } catch (QueroSerForteException e) { //tratamento }
  • 51.
  • 52. A exceção é propagada main() metodo1() metodo2() metodoPerigoso() exception
  • 54. Métodos que lançam exceção   Métodos que podem lançar exceção   devem declarar que podem lançar a exceção   a menos que sejam subclasses RuntimeException   exceções verificadas   a lista de exceções constituem a interface pública do método   Use o throws void meuMetodo() throws Excecao1, Excecao2 { //codigo do método }
  • 55. verb to throw Imperative throw Present I throw you throw he throws we throw you throw they throw
  • 56. Utilizando o meu método tratando tudo void meuMetodo() throws Excecao1, Excecao2 { //codigo do método } void usarMeuMetodo() { try { meuMetodo(); } catch (Excecao1 e1) { //tratamento } catch (Excecao2 e2) { //tratamento } }
  • 57. Utilizando o meu método tratando apenas 1 parte void meuMetodo() throws Excecao1, Excecao2 { //codigo do método } void usarMeuMetodo() throws Excecao2{ try { meuMetodo(); } catch (Excecao1 e1) { //tratamento } }
  • 58. Utilizando o meu método tratando apenas 1 parte void meuMetodo() throws Excecao1, Excecao2 { //codigo do método } void usarMeuMetodo() throws Excecao1{ try { meuMetodo(); } catch (Excecao2 e2) { //tratamento } }
  • 59. Utilizando o meu método e não tratando nada void meuMetodo() throws Excecao1, Excecao2 { //codigo do método } void usarMeuMetodo() throws Excecao1, Excecao2{ meuMetodo(); }
  • 60. A exceção é propagada metodo1() usarMeuMetodo() meuMetodo() exception
  • 62.
  • 63. throws x throws   throws   Use a palavra reservada throws para declarar que o método lança uma exceção public void metodo1() throws Exception{ ... }   throw   Use a palavra reservada throw para lançar a exceção throw new Exception();
  • 64. Um código que pode lançar exceção public class FoguetinhoMentosComCoca extends Foguete { private boolean explode; public void misturarMentosComCoca() throws ExplosaoException { if (explode) { throw new ExplosaoException(); } } }
  • 65. Dica do livro void doStuff() { doMore(); } void doMore() { throw new IOException(); } NÃO PODE
  • 66. Dica do livro void doStuff() { doMore(); } void doMore() throws IOException { throw new IOException(); } NÃO PODE
  • 67. Dica do livro void doStuff() { try { doMore(); } catch (IOException e) { //tratamento } } void doMore() throws IOException { throw new IOException(); } PODE
  • 68. Exceções não verificadas Exceções não verificadas Runtime Exception NullPointer Exception IndexOut OfBound Exception Arithmetic Exception
  • 69. Exceções não verificadas public class Teste { public void metodoPode() { throw new NullPointerException(); } } PODE
  • 70. dica do livro class MyException extends Exception { void someMethod () { doStuff(); } void doStuff() throws MyException { try { throw new MyException(); } catch(MyException me) { throw me; } } }
  • 71. Quanto a classe Error class TestEx { public static void main (String [] args) { metodoMau(); } static void metodoMau() { //Não precisa declarar Error fazerAlgo(); } static void fazerAlgo() { //Não precisa declarar Error try { throw new Error(); } catch(Error me) { throw me; // Capturamos e relançamos } } }
  • 73. Categorias de exceções   Exceções da JVM   Exceções ou erros que são exclusivos da JVM   Exceções Programáticas   Lançadas pelos aplicativos ou por programadores
  • 74. Exceções da JVM   NullPointerException   Lançada quando se tenta utilizar um variável de referência nula   Não como o compilador prever   StackOverFlowError   Lançada quando o SO fica sem espaço na RAM