Certificação Java: Exceções

691 views

Published on

Exceções para certificação Java

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
691
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Certificação Java: Exceções

  1. 1. Curso Preparatório paraCertificação JavaProf.º Eduardo Mendes
  2. 2. Certificação JavaProf.º Eduardo Mendes
  3. 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
  4. 4. Controle de FluxoExceçõese Assertivas
  5. 5. Manipulandoexceções
  6. 6. 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.
  7. 7. 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
  8. 8. 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
  9. 9. Manipulador de exceçõesTransferência de execuçãoprogramamanipuladordeexceções
  10. 10.   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
  11. 11. 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();}}
  12. 12. O que acontece quandovocê usa método de risco???  Você quer chamar um método de uma classeque você não escreveu
  13. 13. 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
  14. 14. O que acontece quandovocê usa método de risco???  Você precisa saber que está chamando ummétodo de risco
  15. 15. 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
  16. 16. “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
  17. 17. O método getSequencer()
  18. 18. 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();}}
  19. 19. 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
  20. 20. 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
  21. 21. Exemplo em pseudocódigotry {captureUmArquivoQueEstaNaRedeleiaArquivoePopuleaTabela}catch(NaoConsegueCapturarArquivoRedeException) {usarArquivoLocal}continuaExecucao
  22. 22. Exemplo em pseudocódigo 2try {captureUmArquivoQueEstaNaRedeleiaArquivoePopuleaTabela}catch(NaoConsegueCapturarArquivoRedeException) {usarArquivoLocal} finally {liberarArquivoUsado}continuaExecucao
  23. 23. Preparando o bolotry {prepararReceitaBololigarFornocolocarBoloNoForno}catch(BoloQueimadoException) {retirarBoloDoForno} finally {desligarForno}
  24. 24. 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
  25. 25. Formas válidastry {// executa algo} finally {// limpa o código}PODE
  26. 26. Formas válidastry {// fazerAlgo} catch (AlgumaException ex) {// manipular exceção} finally {// limpar}PODE
  27. 27. Formas válidastry {// fazer algo}System.out.println(“fora do bloco");NÃO PODE
  28. 28. Formas válidastry {// fazer algo}System.out.println(“fora do bloco");catch(Exception ex) { }NÃO PODE
  29. 29. observaçãopode-se omitiro catch ou finallymasnão é permitidose omitir ambos
  30. 30. Propagando exceções nãocapturadas
  31. 31. Propagando exceções
  32. 32. Propagando exceçõesmain()metodo1()metodo2()metodoPerigoso()try {} finally {}exception
  33. 33. Definindo exceções
  34. 34. Definindo exceções  Subclasses java.lang.Exceptiontry {// algum código}catch (ArrayIndexOutOfBoundsException e) {e.printStackTrace();}
  35. 35. Definindo ExceçõesObjectThrowableError ExceptionRuntimeException
  36. 36. 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
  37. 37. 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
  38. 38. 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
  39. 39. Exceção sem subclasses  Catches com exceções sem subclasses  SÓ PODEM capturar aquele tipotry {//codigo que pode lancar} catch(StringIndexOutOfBoundsException e) {e.printStackTrace();}
  40. 40. Voltando às subclassesRoupaExceptionCalcaException CamisaExceptionMangaLongaException QueroSerForteException
  41. 41. 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
  42. 42. 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}
  43. 43. 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}
  44. 44. 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}
  45. 45. Códigos válidostry {maquinaDeLavar.lavarRoupa();} catch (RoupaException e) {//Trata o erro de todas as roupas do //mesmo jeito}
  46. 46. Inválidotry {maquinaDeLavar.lavarRoupa();} catch (RoupaException e) {//tratamento} catch (CamisaException e) {//tratamento} catch (QueroSerForteException e) {//tratamento}
  47. 47. A exceção é propagadamain()metodo1()metodo2()metodoPerigoso() exception
  48. 48. Declaração de exceções
  49. 49. 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}
  50. 50. verb to throwImperativethrowPresentIthrowyouthrowhe throwswethrowyouthrowtheythrow
  51. 51. 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}}
  52. 52. 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}}
  53. 53. 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}}
  54. 54. Utilizando o meu métodoe não tratando nadavoid meuMetodo() throws Excecao1, Excecao2 {//codigo do método}void usarMeuMetodo()throws Excecao1, Excecao2{meuMetodo();}
  55. 55. A exceção é propagadametodo1()usarMeuMetodo()meuMetodo() exception
  56. 56. Exceções
  57. 57. 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();
  58. 58. Um códigoque pode lançar exceçãopublic class FoguetinhoMentosComCoca extendsFoguete {private boolean explode;public void misturarMentosComCoca()throws ExplosaoException {if (explode) {throw new ExplosaoException();}}}
  59. 59. Dica do livrovoid doStuff() {doMore();}void doMore() {throw new IOException();}NÃO PODE
  60. 60. Dica do livrovoid doStuff() {doMore();}void doMore() throws IOException {throw new IOException();}NÃO PODE
  61. 61. Dica do livrovoid doStuff() {try {doMore();} catch (IOException e) {//tratamento}}void doMore() throws IOException {throw new IOException();}PODE
  62. 62. Exceções não verificadasExceções nãoverificadasRuntimeExceptionNullPointerExceptionIndexOutOfBoundExceptionArithmeticException
  63. 63. Exceções não verificadaspublic class Teste {public void metodoPode() {throw new NullPointerException();}}PODE
  64. 64. dica do livroclass MyException extends Exception {void someMethod () {doStuff();}void doStuff() throws MyException {try {throw new MyException();}catch(MyException me) {throw me;}}}
  65. 65. 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}}}
  66. 66. Erros e exceções comuns
  67. 67. 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
  68. 68. 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
  69. 69. Exceções lançadasprogramaticamente  Ver lista do livro

×