SlideShare uma empresa Scribd logo
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

PPTX
Tratamento de excees slide trabalho
PPTX
Tratamento de exceções em Java
ODP
Java 13 Excecoes
PDF
Tratamento de exceções em Java
PPT
Tratamento de exceções java
PPT
Padrão Observador (Orientação à Objetos)
PPTX
JAVA - Tratamento de Erros
PPT
Como remover um programa de um computador?
Tratamento de excees slide trabalho
Tratamento de exceções em Java
Java 13 Excecoes
Tratamento de exceções em Java
Tratamento de exceções java
Padrão Observador (Orientação à Objetos)
JAVA - Tratamento de Erros
Como remover um programa de um computador?

Mais procurados (20)

PDF
POO - 22 - Tratamento de Exceções em Java
PPTX
Aula 07 - Visualg e Pseudocódigo
PDF
Apostila sobre o Visualg
PDF
Erros, exceções e asserções
PDF
Programação OO - Java
PPT
Java Básico :: Exceções
PDF
Certificação Java: Exceções
PDF
Tratamento de exceção em java
ODP
6 excecoes
PDF
Algoritmos e Visualg parte 1
PDF
(A16) LabMM3 - JavaScript - Erros
PPTX
Algoritmo 01 - Semana 01
PPTX
Aula 03 - Estruturas de repetição
PDF
Alg aula 04-1 - estruturas de-selecao tp1 (se)
PDF
Desenvolvimento em .Net - Excepções
PPTX
Semana 04 Estruturas Condicionais
PDF
Maxima teoria
PPT
Exceptions Em Java UFF
PPTX
Algoritmos 01 - Semana 08 - Estruturas de repetição
POO - 22 - Tratamento de Exceções em Java
Aula 07 - Visualg e Pseudocódigo
Apostila sobre o Visualg
Erros, exceções e asserções
Programação OO - Java
Java Básico :: Exceções
Certificação Java: Exceções
Tratamento de exceção em java
6 excecoes
Algoritmos e Visualg parte 1
(A16) LabMM3 - JavaScript - Erros
Algoritmo 01 - Semana 01
Aula 03 - Estruturas de repetição
Alg aula 04-1 - estruturas de-selecao tp1 (se)
Desenvolvimento em .Net - Excepções
Semana 04 Estruturas Condicionais
Maxima teoria
Exceptions Em Java UFF
Algoritmos 01 - Semana 08 - Estruturas de repetição
Anúncio

Semelhante a Como manipular exceções em java (20)

PDF
Apostila: Curso de java I
PPTX
Excecoes em Java
PPT
Excepções JAVA
PDF
Erros, exceções e asserções
ODP
Programação Defensiva
PPT
Excecoes
PDF
Descobrindo profiling de aplicações java com JProfiler - Getty/IO - Diogene...
PDF
Tratamento de exceções
ODP
Aula04-JavaScript
PDF
Programação defensiva
PPTX
Tratamento de exceções
PPTX
QUALIDADE DE SOFTWARE - AULA 10 - Gest+úo de Defeitos.pptx
PPTX
Debugging node
DOCX
Introdução a programação para plataforma iOS
PDF
Crackeando aplicativos no android _by c0_m3nd4d0r
PDF
Aula Tratamento de Exceções
DOC
Dicas 50 soluções para os problemas mais enervantes do pc
PPTX
Teste de software
Apostila: Curso de java I
Excecoes em Java
Excepções JAVA
Erros, exceções e asserções
Programação Defensiva
Excecoes
Descobrindo profiling de aplicações java com JProfiler - Getty/IO - Diogene...
Tratamento de exceções
Aula04-JavaScript
Programação defensiva
Tratamento de exceções
QUALIDADE DE SOFTWARE - AULA 10 - Gest+úo de Defeitos.pptx
Debugging node
Introdução a programação para plataforma iOS
Crackeando aplicativos no android _by c0_m3nd4d0r
Aula Tratamento de Exceções
Dicas 50 soluções para os problemas mais enervantes do pc
Teste de software
Anúncio

Mais de daliarafaela (13)

PDF
Apostila-de-Matematica-Basica-com-capa.pdf
PDF
matematica .Exercicio e exemplos de questões
PDF
Apostila PROVA BRASIL 2013 MATEMÁTICA COMPLETA.pdf
PDF
Aula 06 - Funções II.Funções parte 1. Exercicio e exemplos de questões
PDF
Aula 03 - Fatoração. Fatoração. Exercicio e exemplos de questões
PDF
Aula 04 - Conjuntos.Conjuntos. Exercicio e exemplos de questões
PDF
Eletronica curso principiantes
PDF
A sala deaulaemfocomoduloi
DOC
5 frameworks para desenvolvimento de apps em html5
DOC
5 frameworks para desenvolvimento de apps em html5
DOC
As 7 principais linguagens de programação usadas em desenvolvimento mobile
PDF
Políticas de avaliação em larga 2017
PDF
00 propserpot
Apostila-de-Matematica-Basica-com-capa.pdf
matematica .Exercicio e exemplos de questões
Apostila PROVA BRASIL 2013 MATEMÁTICA COMPLETA.pdf
Aula 06 - Funções II.Funções parte 1. Exercicio e exemplos de questões
Aula 03 - Fatoração. Fatoração. Exercicio e exemplos de questões
Aula 04 - Conjuntos.Conjuntos. Exercicio e exemplos de questões
Eletronica curso principiantes
A sala deaulaemfocomoduloi
5 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
Políticas de avaliação em larga 2017
00 propserpot

Como manipular 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