Mini Curso de Java – Parte 9 2


Olá pessoal. Esta é a nona parte do nosso mini curso de Java que terá 11 partes. Ele é voltado para iniciantes, porém é recomendado que ao estudá-lo, você já tenha pelo menos algum conhecimento em lógica de programação. Se você perdeu:
a primeira parte, leia aqui; a segunda parte, leia aqui; a terceira parte, leia aqui; a quarta parte, leia aqui; a quinta parte, leia aqui; a sexta parte, leia aqui; a sétima parte, leia aqui; a oitava parte, leia aqui;

Tratamento de exceções

Definição:
Exceções são situações excepcionais e geralmente indesejáveis que podem ocorrer durante a execução de um programa. Exceções podem ser tratadas incluindo-se código adequado no programa; não são portanto erros fatais.

Alguns exemplos típicos de exceções são:
– Índice de uma lista fora do intervalo permitido.
– Problemas com operações aritméticas, tais como “overflow” e divisão por zero.
– Argumentos inválidos numa chamada a um método.
– Uso de referência que não aponta para nenhum objeto.
– Falta de memória (pouco provável quando estamos falando de Java devido ao Garbage Collector.

O método de tratamento de exceções do Java permite tratar uma exceção num escopo diferente daquele que gerou a exceção. Isto permite uma melhor organização do código.

Naturalmente exceções são objetos em Java. A classe Exception é uma superclasse de todas as exceções. Existem vários tipos de exceções já definidos em java, mas o programador pode criar suas próprias exceções.

Muitas classes de biblioteca possuem métodos que podem gerar (“lançar”) exceções. Estas exceções podem ser tratadas (“capturadas”) por código escrito pelo programador. Além disto, métodos escritos pelo programador também podem lançar exceções, tanto de tipos definidos nas bibliotecas como de novos tipos construidos pelo programador.

Lançando exceções:
Uma exceção é lançada usando-se a palavra chave throw seguinda da referência à exceção. Veja o exemplo abaixo:
Exception opa = new Exception( “deu zebra” );

if( temProblema ) throw opa;

Se o programador desejar que a exceção assim lançada seja tratada fora do método que a gerou, ele deve explicitar isto usando a palavra chave throws seguida do tipo de exceção, na declaração do método. Por exemplo, o código acima estaria inserido no corpo de um método declarado como segue:
TipoDeRetorno nomeDoMetodo() throws Exception {
…// Aqui vai o código acima
}

Na verdade, existe uma classe de exceções, RuntimeException (do pacote java.lang) que não precisam ser listadas explicitamente após a palavra chave throws.

Correspondentemente, não é mandatório para o programador incluir código para manipular tais exceções.

Uma vez que a exceção foi lançada, a execução do método é interrompida e o controle volta ao objeto que chamou este método. Este objeto deve capturar a exceção como descrito a seguir, ou eventualmente relançar a exceção para que ela seja capturada mais alto na hierarquia das chamadas de métodos.

Tratando exceções:
Para capturar uma exceção, é necessário montar a seguinte estrutura de código.

O código que pode lançar a exceção deve ser inserido num bloco precedido da palavra chave try. O processador então tentará executar o bloco, até que eventualmente uma exceção seja lançada, seja por um comando contido dentro do bloco, seja por um método chamado dentro do bloco.

O bloco try descrito acima deve ser seguido de um bloco que será executado caso houver de fato lançamento de uma exceção do tipo em questão. Este bloco deve ser anunciado pela palavra chave catch seguida (entre parénteses) do tipo de exceção em questão. Se vários tipos de exceções podem ser lançadas no bloco try, deve-se fornecer um bloco catch para cada tipo de exceção. Se uma exceção do tipo em questão for lançada no bloco try, o bloco try é encerrado e a execução salta para o bloco catch apropriado. Os blocos catch são chamados manipuladores de exceções.

Ainda é possível acrescentar, após o(s) bloco(s) catch, um bloco precedido da palavra chave finally, que será executado em todos se casos, após a execução completa do bloco try ou após a execução de um bloco catch, conforme o caso.

Abaixo temos o exemplo da estrutura:
try {
…// aqui vai código que pode gerar exceções dos tipos
…// ExceptionType1 e ExceptionType2

}
catch( ExceptionType1 opa1 ) {
…// aqui vai código para lidar com uma exceção do tipo
…// ExceptionType1

}
catch( ExceptionType2 opa2 ) {
…// aqui vai código para lidar com uma exceção do tipo
…// ExceptionType2
}
finally {
…// aqui vai código que deve ser executado em qualquer caso
}

Quando ocorre uma exceção, os blocos catch são examinados sucessivamente até que o argumento corresponda ao tipo da exceção. Note que, no exemplo acima, se ExceptionType2 for uma subclasse de ExceptionType1, o segundo bloco catch nunca será alcançado. Neste caso, deve-se inverter a ordem dos blocos catch.

Um bloco catch pode também lançar novas exceções e relançar a exceção que ele manipulou. Neste caso, todo o conjunto de blocos acima deve estar inserido num bloco try mais externo e as exceções em questão devem ser manipuladas por blocos catch seguindo este bloco try externo.

Definição de novos tipos de exceções:
Para que uma exceção seja lançada é preciso acresentar a palavra throws seguida da referência a exceção. Veja o exemplo abaixo.
public class myException extends Exception {
…private String info = “”;
…public myException(String e) {
……info = e;
…}
}

public class excecao {
…private boolean temProblema = false;
…public void metodo() throws myException {
……if(temProblema) throw new myException(“gerou exceção”);
…}
}

Uma vez que a exceção foi lançada, a execução do método é interrompida e o controle volta ao objeto que chamou este método. Este objeto deve capturar a exceção como descrito a seguir, ou eventualmente relançar a exceção para que ela seja capturada mais alto na hierarquia das chamadas de métodos.

Semana que vem estarei de volta com a parte 10 do Mini Curso de Java: Coleções. Até lá! 😉

Últimos 5 artigos de Tiago Souza

Sobre Tiago Souza

De Campinas-SP, bacharel em Ciência da Computação pela Anhanguera Educacional. Técnico em Processamento de Dados pelo Cotuca é desenvolvedor Web e trabalhou dois anos com desenvolvimento PHP e Java. Atualmente trabalha como desenvolvedor .Net (C#). Utilizando metodologia SCRUM, Também desenvolve aplicativos para Android por prazer.

Deixe uma resposta

2 pensamentos em “Mini Curso de Java – Parte 9

  • luiz

    gostei do curso..

    Professor…
    Sou aluno do IST
    estou terminando um projeto que tenho que gerenciar banco de Dados de tatuagenes(imagens e texto), minha dúvida é: gostaria de saber qual o comando SQL para tabela com CHAVE PRIMÁRIA CASADA (N PARA N)
    outra dúvida Como tratar arquivo binário com texto mais imagem em bancos de dados (Ler e Escrever em Bancos)

    Se puder ajudar agradeço… Um abraço..