SlideShare uma empresa Scribd logo
1 de 2
http://www.totalcross.com/blog
Como manipular exceções em Java
Uma das funcionalidades que tornam o Java uma linguagem robusta em relação às outras linguagens é
o conceito de exceção (Exceptions). Em outras linguagens, o uso ou não de exceções é opcional, mas
no Java é obrigatório. Entretanto, a maioria das pessoas fazem mal uso dessa funcionalidade que é
crucial no desenvolvimento de qualquer programa.
As exceções foram criadas com o objetivo principal de forçar o tratamento de um erro. Existem dois
tipos de exceção:
a. Casos em que o erro pode ocorrer e você está ciente disso
b. Casos em que o erro ocorre mas você não está preparado
Um exemplo de exceção do primeiro tipo é a FileNotFoundException, quando o arquivo não existe. São
casos em que você sabe que o erro pode ocorrer, e em geral os trata localmente, no mesmo lugar onde
o método que dispara a exceção é chamado.
As exceções do caso b, em que você não espera que ocorram, é que são as principais a serem tratadas
no programa, e a forma correta de se tratar elas é o que diferencia um programa robusto de um
programa capenga.
Existem 3 formas de tratar uma exceção:
1. try { … } catch (Exception e) {}
2. try { … } catch (Exception e) {e.printStackTrace();}
3. try { … } catch (Exception e) {tratar(e);}
A primeira forma é a pior de todas, pois você engole a exceção e o programa vai continuar funcionando
em um estado em que algo vai explodir mais a frente.
A segunda forma é um pouco menos pior, pois você ao menos imprime ela no console, e funciona muito
bem no ambiente de desenvolvimento. O problema é que em geral não é possível pegar o stack trace de
um programa em campo.
A terceira forma é a ideal, pois você está tratando a exceção. Mas qual é a melhor forma de tratar ela? O
ideal, é usar algo como o código abaixo:
public static void logException(Throwable t)
{
t.printStackTrace();
if (!Settings.onJavaSE)
try
{
File f = new File(Settings.platform.equals(Settings.ANDROID) ? “/sdcard/tcerror.log” :
“device/tc_error.log”,File.CREATE);
f.setPos(f.getSize());
String m = t.getMessage();
String c = t.getClass().getName();
String s = Vm.getStackTrace(t);
f.writeBytes(new Time().getSQLString());
f.writeBytes(“Class: “+c);
if (m != null) f.writeBytes(“Message: “+m);
f.writeBytes(“Stack trace: n”);
f.writeBytes(s);
f.close();
}
catch (Throwable tt)
{
tt.printStackTrace();
}
}
Nesse método, a exceção é impressa no console mas também é guardada em um arquivo, sendo que no
Android usamos o cartão de memória, e nas outras plataformas, o diretório da aplicação. E o que fazer
com esse arquivo? A melhor opção é enviar ele por email para sua empresa, assim você consegue
corrigir um erro sem que o usuário lhe comunique.
Então, supondo que você colocou o método acima na classe Utils, o tratamento ficaria assim:
3. try { … } catch (Exception e) {Utils.handleException(e);}
Ótimo, mas ainda resta um problema para exceções do tipo b, que é tão grave quanto ignora-las: ONDE
tratar a exceção?
A resposta para esse problema é: dispare a exceção para cima, até onde não conseguir mais. No
TotalCross, esses lugares são em geral dois: o construtor de uma classe qualquer que você não possa
fazer um “throws Exception”, ou no método onEvent. Por exemplo, um método onEvent ficaria assim:
public void onEvent(Event e)
{
try
{
if (e.target == ControlEvent.PRESSED)
…..
}
catch (Throwable t)
{
Utils.handleException(t);
}
}
Então, todos os métodos chamados no onEvent teriam que ter na assinatura: throws Exception.
Fazendo assim, disparando a exceção para cima e tendo um método único para tratar as exceções que
são realmente exceções (e não algo que é esperado), seu programa ficará muito mais robusto e seu
custo de suporte cairá substancialmente.
2

Mais conteúdo relacionado

Mais procurados

Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: ExceçõesEduardo Mendes
 
Tratamento de exceção em java
Tratamento de exceção em javaTratamento de exceção em java
Tratamento de exceção em javaMarques Amaro
 
Algoritmos e Visualg parte 1
Algoritmos e Visualg   parte 1Algoritmos e Visualg   parte 1
Algoritmos e Visualg parte 1Marcio Pinto
 
(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - Erros(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - ErrosCarlos Santos
 
Algoritmo 01 - Semana 01
Algoritmo 01 - Semana 01Algoritmo 01 - Semana 01
Algoritmo 01 - Semana 01Eder Samaniego
 
Aula 03 - Estruturas de repetição
Aula 03 - Estruturas de repetiçãoAula 03 - Estruturas de repetição
Aula 03 - Estruturas de repetiçãoEder Samaniego
 
Alg aula 04-1 - estruturas de-selecao tp1 (se)
Alg   aula 04-1 - estruturas de-selecao tp1 (se)Alg   aula 04-1 - estruturas de-selecao tp1 (se)
Alg aula 04-1 - estruturas de-selecao tp1 (se)Thalles Anderson
 
Desenvolvimento em .Net - Excepções
Desenvolvimento em .Net - ExcepçõesDesenvolvimento em .Net - Excepções
Desenvolvimento em .Net - ExcepçõesVitor Silva
 
Semana 04 Estruturas Condicionais
Semana 04   Estruturas CondicionaisSemana 04   Estruturas Condicionais
Semana 04 Estruturas CondicionaisEder Samaniego
 
Algoritmos 01 - Semana 08 - Estruturas de repetição
Algoritmos 01 - Semana 08 - Estruturas de repetiçãoAlgoritmos 01 - Semana 08 - Estruturas de repetição
Algoritmos 01 - Semana 08 - Estruturas de repetiçãoEder Samaniego
 

Mais procurados (20)

POO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em JavaPOO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em Java
 
Aula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e PseudocódigoAula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e Pseudocódigo
 
Apostila sobre o Visualg
Apostila sobre o VisualgApostila sobre o Visualg
Apostila sobre o Visualg
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
Java Básico :: Exceções
Java Básico :: ExceçõesJava Básico :: Exceções
Java Básico :: Exceções
 
Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: Exceções
 
Tratamento de exceção em java
Tratamento de exceção em javaTratamento de exceção em java
Tratamento de exceção em java
 
6 excecoes
6 excecoes6 excecoes
6 excecoes
 
Algoritmos e Visualg parte 1
Algoritmos e Visualg   parte 1Algoritmos e Visualg   parte 1
Algoritmos e Visualg parte 1
 
(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - Erros(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - Erros
 
Algoritmo 01 - Semana 01
Algoritmo 01 - Semana 01Algoritmo 01 - Semana 01
Algoritmo 01 - Semana 01
 
Aula 07
Aula 07Aula 07
Aula 07
 
Aula 03 - Estruturas de repetição
Aula 03 - Estruturas de repetiçãoAula 03 - Estruturas de repetição
Aula 03 - Estruturas de repetição
 
Alg aula 04-1 - estruturas de-selecao tp1 (se)
Alg   aula 04-1 - estruturas de-selecao tp1 (se)Alg   aula 04-1 - estruturas de-selecao tp1 (se)
Alg aula 04-1 - estruturas de-selecao tp1 (se)
 
Desenvolvimento em .Net - Excepções
Desenvolvimento em .Net - ExcepçõesDesenvolvimento em .Net - Excepções
Desenvolvimento em .Net - Excepções
 
Semana 04 Estruturas Condicionais
Semana 04   Estruturas CondicionaisSemana 04   Estruturas Condicionais
Semana 04 Estruturas Condicionais
 
Maxima teoria
Maxima teoriaMaxima teoria
Maxima teoria
 
Exceptions Em Java UFF
Exceptions Em Java UFFExceptions Em Java UFF
Exceptions Em Java UFF
 
Algoritmos 01 - Semana 08 - Estruturas de repetição
Algoritmos 01 - Semana 08 - Estruturas de repetiçãoAlgoritmos 01 - Semana 08 - Estruturas de repetição
Algoritmos 01 - Semana 08 - Estruturas de repetição
 

Semelhante a Como tratar exceções em Java

Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java IVerônica Veiga
 
Excecoes
ExcecoesExcecoes
ExcecoesEMSNEWS
 
Descobrindo profiling de aplicações java com JProfiler - Getty/IO - Diogene...
Descobrindo profiling de aplicações java com JProfiler - Getty/IO - Diogene...Descobrindo profiling de aplicações java com JProfiler - Getty/IO - Diogene...
Descobrindo profiling de aplicações java com JProfiler - Getty/IO - Diogene...Diogenes Buarque Ianakiara
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceçõesLeonardo Malkes
 
Programação defensiva
Programação defensivaProgramação defensiva
Programação defensivaKayo Rayner
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceçõesFAFICA
 
QUALIDADE DE SOFTWARE - AULA 10 - Gest+úo de Defeitos.pptx
QUALIDADE DE SOFTWARE - AULA 10 - Gest+úo de Defeitos.pptxQUALIDADE DE SOFTWARE - AULA 10 - Gest+úo de Defeitos.pptx
QUALIDADE DE SOFTWARE - AULA 10 - Gest+úo de Defeitos.pptxAlexandreLisboadaSil
 
Introdução a programação para plataforma iOS
Introdução a programação para plataforma iOSIntrodução a programação para plataforma iOS
Introdução a programação para plataforma iOSDevmedia
 
Crackeando aplicativos no android _by c0_m3nd4d0r
Crackeando aplicativos no android  _by c0_m3nd4d0rCrackeando aplicativos no android  _by c0_m3nd4d0r
Crackeando aplicativos no android _by c0_m3nd4d0rnunes666
 
Dicas 50 soluções para os problemas mais enervantes do pc
Dicas  50 soluções para os problemas mais enervantes do pcDicas  50 soluções para os problemas mais enervantes do pc
Dicas 50 soluções para os problemas mais enervantes do pcVanderlei Nascimento
 

Semelhante a Como tratar exceções em Java (20)

Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java I
 
Excecoes em Java
Excecoes em JavaExcecoes em Java
Excecoes em Java
 
Excepções JAVA
Excepções JAVAExcepções JAVA
Excepções JAVA
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Excecoes
ExcecoesExcecoes
Excecoes
 
Java3
Java3Java3
Java3
 
Descobrindo profiling de aplicações java com JProfiler - Getty/IO - Diogene...
Descobrindo profiling de aplicações java com JProfiler - Getty/IO - Diogene...Descobrindo profiling de aplicações java com JProfiler - Getty/IO - Diogene...
Descobrindo profiling de aplicações java com JProfiler - Getty/IO - Diogene...
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
Aula04-JavaScript
Aula04-JavaScriptAula04-JavaScript
Aula04-JavaScript
 
Programação defensiva
Programação defensivaProgramação defensiva
Programação defensiva
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
QUALIDADE DE SOFTWARE - AULA 10 - Gest+úo de Defeitos.pptx
QUALIDADE DE SOFTWARE - AULA 10 - Gest+úo de Defeitos.pptxQUALIDADE DE SOFTWARE - AULA 10 - Gest+úo de Defeitos.pptx
QUALIDADE DE SOFTWARE - AULA 10 - Gest+úo de Defeitos.pptx
 
Debugging node
Debugging nodeDebugging node
Debugging node
 
Introdução a programação para plataforma iOS
Introdução a programação para plataforma iOSIntrodução a programação para plataforma iOS
Introdução a programação para plataforma iOS
 
Crackeando aplicativos no android _by c0_m3nd4d0r
Crackeando aplicativos no android  _by c0_m3nd4d0rCrackeando aplicativos no android  _by c0_m3nd4d0r
Crackeando aplicativos no android _by c0_m3nd4d0r
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Dicas 50 soluções para os problemas mais enervantes do pc
Dicas  50 soluções para os problemas mais enervantes do pcDicas  50 soluções para os problemas mais enervantes do pc
Dicas 50 soluções para os problemas mais enervantes do pc
 
Java1
Java1Java1
Java1
 
Teste de software
Teste de softwareTeste de software
Teste de software
 

Mais de daliarafaela

Eletronica curso principiantes
Eletronica   curso principiantesEletronica   curso principiantes
Eletronica curso principiantesdaliarafaela
 
A sala deaulaemfocomoduloi
A sala deaulaemfocomoduloiA sala deaulaemfocomoduloi
A sala deaulaemfocomoduloidaliarafaela
 
5 frameworks para desenvolvimento de apps em html5
5 frameworks para desenvolvimento de apps em html55 frameworks para desenvolvimento de apps em html5
5 frameworks para desenvolvimento de apps em html5daliarafaela
 
5 frameworks para desenvolvimento de apps em html5
5 frameworks para desenvolvimento de apps em html55 frameworks para desenvolvimento de apps em html5
5 frameworks para desenvolvimento de apps em html5daliarafaela
 
As 7 principais linguagens de programação usadas em desenvolvimento mobile
As 7 principais linguagens de programação usadas em desenvolvimento mobileAs 7 principais linguagens de programação usadas em desenvolvimento mobile
As 7 principais linguagens de programação usadas em desenvolvimento mobiledaliarafaela
 
Políticas de avaliação em larga 2017
Políticas de avaliação em larga 2017Políticas de avaliação em larga 2017
Políticas de avaliação em larga 2017daliarafaela
 

Mais de daliarafaela (7)

Eletronica curso principiantes
Eletronica   curso principiantesEletronica   curso principiantes
Eletronica curso principiantes
 
A sala deaulaemfocomoduloi
A sala deaulaemfocomoduloiA sala deaulaemfocomoduloi
A sala deaulaemfocomoduloi
 
5 frameworks para desenvolvimento de apps em html5
5 frameworks para desenvolvimento de apps em html55 frameworks para desenvolvimento de apps em html5
5 frameworks para desenvolvimento de apps em html5
 
5 frameworks para desenvolvimento de apps em html5
5 frameworks para desenvolvimento de apps em html55 frameworks para desenvolvimento de apps em html5
5 frameworks para desenvolvimento de apps em html5
 
As 7 principais linguagens de programação usadas em desenvolvimento mobile
As 7 principais linguagens de programação usadas em desenvolvimento mobileAs 7 principais linguagens de programação usadas em desenvolvimento mobile
As 7 principais linguagens de programação usadas em desenvolvimento mobile
 
Políticas de avaliação em larga 2017
Políticas de avaliação em larga 2017Políticas de avaliação em larga 2017
Políticas de avaliação em larga 2017
 
00 propserpot
00 propserpot00 propserpot
00 propserpot
 

Como tratar exceções em Java

  • 1. http://www.totalcross.com/blog Como manipular exceções em Java Uma das funcionalidades que tornam o Java uma linguagem robusta em relação às outras linguagens é o conceito de exceção (Exceptions). Em outras linguagens, o uso ou não de exceções é opcional, mas no Java é obrigatório. Entretanto, a maioria das pessoas fazem mal uso dessa funcionalidade que é crucial no desenvolvimento de qualquer programa. As exceções foram criadas com o objetivo principal de forçar o tratamento de um erro. Existem dois tipos de exceção: a. Casos em que o erro pode ocorrer e você está ciente disso b. Casos em que o erro ocorre mas você não está preparado Um exemplo de exceção do primeiro tipo é a FileNotFoundException, quando o arquivo não existe. São casos em que você sabe que o erro pode ocorrer, e em geral os trata localmente, no mesmo lugar onde o método que dispara a exceção é chamado. As exceções do caso b, em que você não espera que ocorram, é que são as principais a serem tratadas no programa, e a forma correta de se tratar elas é o que diferencia um programa robusto de um programa capenga. Existem 3 formas de tratar uma exceção: 1. try { … } catch (Exception e) {} 2. try { … } catch (Exception e) {e.printStackTrace();} 3. try { … } catch (Exception e) {tratar(e);} A primeira forma é a pior de todas, pois você engole a exceção e o programa vai continuar funcionando em um estado em que algo vai explodir mais a frente. A segunda forma é um pouco menos pior, pois você ao menos imprime ela no console, e funciona muito bem no ambiente de desenvolvimento. O problema é que em geral não é possível pegar o stack trace de um programa em campo. A terceira forma é a ideal, pois você está tratando a exceção. Mas qual é a melhor forma de tratar ela? O ideal, é usar algo como o código abaixo: public static void logException(Throwable t) { t.printStackTrace(); if (!Settings.onJavaSE) try { File f = new File(Settings.platform.equals(Settings.ANDROID) ? “/sdcard/tcerror.log” : “device/tc_error.log”,File.CREATE); f.setPos(f.getSize()); String m = t.getMessage(); String c = t.getClass().getName(); String s = Vm.getStackTrace(t); f.writeBytes(new Time().getSQLString()); f.writeBytes(“Class: “+c); if (m != null) f.writeBytes(“Message: “+m); f.writeBytes(“Stack trace: n”); f.writeBytes(s); f.close(); } catch (Throwable tt) { tt.printStackTrace(); } }
  • 2. Nesse método, a exceção é impressa no console mas também é guardada em um arquivo, sendo que no Android usamos o cartão de memória, e nas outras plataformas, o diretório da aplicação. E o que fazer com esse arquivo? A melhor opção é enviar ele por email para sua empresa, assim você consegue corrigir um erro sem que o usuário lhe comunique. Então, supondo que você colocou o método acima na classe Utils, o tratamento ficaria assim: 3. try { … } catch (Exception e) {Utils.handleException(e);} Ótimo, mas ainda resta um problema para exceções do tipo b, que é tão grave quanto ignora-las: ONDE tratar a exceção? A resposta para esse problema é: dispare a exceção para cima, até onde não conseguir mais. No TotalCross, esses lugares são em geral dois: o construtor de uma classe qualquer que você não possa fazer um “throws Exception”, ou no método onEvent. Por exemplo, um método onEvent ficaria assim: public void onEvent(Event e) { try { if (e.target == ControlEvent.PRESSED) ….. } catch (Throwable t) { Utils.handleException(t); } } Então, todos os métodos chamados no onEvent teriam que ter na assinatura: throws Exception. Fazendo assim, disparando a exceção para cima e tendo um método único para tratar as exceções que são realmente exceções (e não algo que é esperado), seu programa ficará muito mais robusto e seu custo de suporte cairá substancialmente. 2