• Save
Certificação Java: Exceções
Upcoming SlideShare
Loading in...5
×
 

Certificação Java: Exceções

on

  • 515 views

Exceções para certificação Java

Exceções para certificação Java

Statistics

Views

Total Views
515
Views on SlideShare
515
Embed Views
0

Actions

Likes
1
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Certificação Java: Exceções Certificação Java: Exceções Presentation Transcript

  • Curso Preparatório paraCertificação JavaProf.º Eduardo Mendes
  • Certificação JavaProf.º 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 FluxoExceçõese Assertivas
  • Manipulandoexceções
  • Objetivos para a certificação2.4 Escrever códigos que façam uso apropriadode exceções e de cláusulasde manipulação de exceções (try, catch, finally)e declarar método, subscritos ou não,os quais lancem exceções2.5 Reconhecer o efeito de uma exceção lançada em umponto específico do fragmento de um código.É bom ressaltar que a exceção pode ser de tempo deexecução, verificada ou um erro.
  • Manipulação de exceçõesPodem garantir arobustez de umaaplicaçãoPermite detectarerros de maneiramais fácilSepara nitidamente ocódigo que manipula aexceção do códigoque gera a exceçãoPermite lidar comdiferentes possíveisexceçõesPermite realizaroperações que devamser realizadasindependentementedo erro
  • Terminologia  Exceção  condição excepcional  ocorrência que altera o fluxo normal doprograma  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çõesTransferência de execuçãoprogramamanipuladordeexceçõ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 estasituação excepcional?Manipulação de exceções
  • MusicTest1.javaimport 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 quandovocê usa método de risco???  Você quer chamar um método de uma classeque você não escreveu
  • O que acontece quandovocê usa método de risco???  O método faz algo arriscado, algo que talveznão funcione em tempo de execução
  • O que acontece quandovocê usa método de risco???  Você precisa saber que está chamando ummétodo de risco
  • O que acontece quandovocê usa método de risco???  Você escreve o código que trata a falha, casoocorra. Você tem que estar preparado, nestecaso
  • “Algo ruim aconteceu.Eu falhei”  Mecanismo simples e claro  Se um método pode falhar, ele deve declarar quepode ocorrer a falha, assim é possível se precaver  Como saber se um método lança umaexceção???   THROWS
  • O método getSequencer()
  • try/catch  O compilador precisa saber que você sabe queestá se arriscandopublic 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çarexceções  região protegida  catch  associa um tipo de exceção a um bloco decódigo que pode tratá-la  finally  realiza código dependente do bloco try eindependente da exceção ser lançada
  • Manipulador de exceção1. try {2. // Primeira linha da região protegida3. // que é controlada pela palavra-chave try4. // Coloque aqui o código que pode lançar exceção5. // Várias linhas ou apenas uma6. }7. catch(PrimeiraException) {8. // Ponha o código que manipula a exceção11. }12. catch(SegundaException) {13. // Ponha o código aqui que manipula a exceção14. }15.16. // Códigos que não necessitam de proteção
  • Exemplo em pseudocódigotry {captureUmArquivoQueEstaNaRedeleiaArquivoePopuleaTabela}catch(NaoConsegueCapturarArquivoRedeException) {usarArquivoLocal}continuaExecucao
  • Exemplo em pseudocódigo 2try {captureUmArquivoQueEstaNaRedeleiaArquivoePopuleaTabela}catch(NaoConsegueCapturarArquivoRedeException) {usarArquivoLocal} finally {liberarArquivoUsado}continuaExecucao
  • Preparando o bolotry {prepararReceitaBololigarFornocolocarBoloNoForno}catch(BoloQueimadoException) {retirarBoloDoForno} finally {desligarForno}
  • Manipulador de exceçõesregras  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 umaexceção ou não  deve ser precedido de um try ou de um try/catch
  • Formas válidastry {// executa algo} finally {// limpa o código}PODE
  • Formas válidastry {// fazerAlgo} catch (AlgumaException ex) {// manipular exceção} finally {// limpar}PODE
  • Formas válidastry {// fazer algo}System.out.println(“fora do bloco");NÃO PODE
  • Formas válidastry {// fazer algo}System.out.println(“fora do bloco");catch(Exception ex) { }NÃO PODE
  • observaçãopode-se omitiro catch ou finallymasnão é permitidose omitir ambos
  • Propagando exceções nãocapturadas
  • Propagando exceções
  • Propagando exceçõesmain()metodo1()metodo2()metodoPerigoso()try {} finally {}exception
  • Definindo exceções
  • Definindo exceções  Subclasses java.lang.Exceptiontry {// algum código}catch (ArrayIndexOutOfBoundsException e) {e.printStackTrace();}
  • Definindo ExceçõesObjectThrowableError ExceptionRuntimeException
  • Hierarquias de exceções•  Objetos que podem ser lançados e capturados•  define subclasses que representam situaçõesincomuns•  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 queum tipo exceçãotry {//codigo que pode lancar} catch (MinhaExcecao e) {}se esta exceção tiver subclasses, este blococatch será capaz de capturar exceçõesdeste tipo e de todas as subclasses
  • Dito isto  O bloco abaixo captura qualquer exceçãotry {//codigo que pode lancar} catch (Exception e) {}Provavelmentenão é a melhor opção.Geralmente é preciso tratar asexceções de forma distinta
  • Exceção sem subclasses  Catches com exceções sem subclasses  SÓ PODEM capturar aquele tipotry {//codigo que pode lancar} catch(StringIndexOutOfBoundsException e) {e.printStackTrace();}
  • Voltando às subclassesRoupaExceptionCalcaException CamisaExceptionMangaLongaException QueroSerForteException
  • Voltando às subclassesRoupaExceptionCalcaException CamisaExceptionMangaLongaException QueroSerForteExeptionSe um código é capaz delançar várias exceções deuma mesma hierarquiaE se quiser manipularcada uma individualmenteos blocos catches devemtratar da mais específicapara mais geral
  • Códigos válidostry {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álidostry {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álidostry {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álidostry {maquinaDeLavar.lavarRoupa();} catch (RoupaException e) {//Trata o erro de todas as roupas do //mesmo jeito}
  • Inválidotry {maquinaDeLavar.lavarRoupa();} catch (RoupaException e) {//tratamento} catch (CamisaException e) {//tratamento} catch (QueroSerForteException e) {//tratamento}
  • A exceção é propagadamain()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úblicado método  Use o throwsvoid meuMetodo() throws Excecao1,Excecao2 {//codigo do método}
  • verb to throwImperativethrowPresentIthrowyouthrowhe throwswethrowyouthrowtheythrow
  • Utilizando o meu métodotratando tudovoid meuMetodo() throws Excecao1, Excecao2 {//codigo do método}void usarMeuMetodo() {try {meuMetodo();} catch (Excecao1 e1) {//tratamento} catch (Excecao2 e2) {//tratamento}}
  • Utilizando o meu métodotratando apenas 1 partevoid meuMetodo() throws Excecao1, Excecao2 {//codigo do método}void usarMeuMetodo() throws Excecao2{try {meuMetodo();} catch (Excecao1 e1) {//tratamento}}
  • Utilizando o meu métodotratando apenas 1 partevoid meuMetodo() throws Excecao1, Excecao2 {//codigo do método}void usarMeuMetodo() throws Excecao1{try {meuMetodo();} catch (Excecao2 e2) {//tratamento}}
  • Utilizando o meu métodoe não tratando nadavoid meuMetodo() throws Excecao1, Excecao2 {//codigo do método}void usarMeuMetodo()throws Excecao1, Excecao2{meuMetodo();}
  • A exceção é propagadametodo1()usarMeuMetodo()meuMetodo() exception
  • Exceções
  • throws x throws  throws  Use a palavra reservada throws para declarar queo método lança uma exceçãopublic void metodo1() throws Exception{...}  throw  Use a palavra reservada throw para lançar aexceçãothrow new Exception();
  • Um códigoque pode lançar exceçãopublic class FoguetinhoMentosComCoca extendsFoguete {private boolean explode;public void misturarMentosComCoca()throws ExplosaoException {if (explode) {throw new ExplosaoException();}}}
  • Dica do livrovoid doStuff() {doMore();}void doMore() {throw new IOException();}NÃO PODE
  • Dica do livrovoid doStuff() {doMore();}void doMore() throws IOException {throw new IOException();}NÃO PODE
  • Dica do livrovoid doStuff() {try {doMore();} catch (IOException e) {//tratamento}}void doMore() throws IOException {throw new IOException();}PODE
  • Exceções não verificadasExceções nãoverificadasRuntimeExceptionNullPointerExceptionIndexOutOfBoundExceptionArithmeticException
  • Exceções não verificadaspublic class Teste {public void metodoPode() {throw new NullPointerException();}}PODE
  • dica do livroclass MyException extends Exception {void someMethod () {doStuff();}void doStuff() throws MyException {try {throw new MyException();}catch(MyException me) {throw me;}}}
  • Quanto a classe Errorclass TestEx {public static void main (String [] args) {metodoMau();}static void metodoMau() { //Não precisa declarar ErrorfazerAlgo();}static void fazerAlgo() { //Não precisa declarar Errortry {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 porprogramadores
  • Exceções da JVM  NullPointerException  Lançada quando se tenta utilizar um variável dereferência nula  Não como o compilador prever  StackOverFlowError  Lançada quando o SO fica sem espaço na RAM
  • Exceções lançadasprogramaticamente  Ver lista do livro